[{"data":1,"prerenderedAt":29453},["ShallowReactive",2],{"tag-posts-ui-ux-en":3,"author-en-raed-bahri":29386,"category-en-startups":29403,"category-en-indie-hacking":2080,"category-en-product-management":29416,"category-en-product-development":29428,"category-en-development":29441},[4,50,88,345,377,1761,1790,1847,1876,1904,2082,2112,2141,6695,6723,6749,6778,6812,6842,7447,7491,7520,10341,10386,18221,18249,18294,18328,18357,18754,22413,22530,22706,22893,22924,22950,22976,23003,23032,23060,23087,23114,23146,23173,23200,23427,23455,23482,23510,23538,23565,23592,23621,23650,23676,23701,23727,23755,23781,24010,24052,24095,24139,24168,24194,24238,24264,25958,26968,27010,27036,27081,27126,27167,27286,27329,28537,28565,28591,28617,28749,28846,28952,29038,29133,29209,29235,29280,29308],{"id":5,"title":6,"author":7,"body":8,"category":29,"description":30,"extension":31,"image":32,"isDraft":33,"isFeatured":34,"locale":35,"meta":36,"navigation":33,"path":41,"publishedAt":42,"readingTime":43,"seo":44,"stem":45,"tags":46,"updatedAt":42,"__hash__":49},"articles_en/10-critical-questions-before-starting-any-tech-project.md","10 Critical Questions Before Starting Any Tech Project","raed-bahri",{"type":9,"value":10,"toc":23},"minimark",[11,15,20],[12,13,14],"p",{},"Before starting your tech project, make sure you answer these 10 critical questions.",[16,17,19],"h2",{"id":18},"content-under-development","Content Under Development",[12,21,22],{},"This article is currently being written and will be published soon.",{"title":24,"searchDepth":25,"depth":25,"links":26},"",3,[27],{"id":18,"depth":28,"text":19},2,"startups","Comprehensive guide about startup advice for Arabic entrepreneurs","md","https://images.unsplash.com/photo-1454165804606-c3d57bc86b40?q=80&w=1200&auto=format&fit=crop",true,false,"en",{"excerpt":37},{"type":9,"value":38},[39],[12,40,14],{},"/10-critical-questions-before-starting-any-tech-project","2025-05-20",9,{"title":6,"description":30},"10-critical-questions-before-starting-any-tech-project",[29,47,48],"entrepreneurship","planning","gcceNjEZ45bRJepKg6k4l5WkOxK6347KVy2PPDAv3Lc",{"id":51,"title":52,"author":7,"body":53,"category":73,"description":74,"extension":31,"image":32,"isDraft":33,"isFeatured":34,"locale":35,"meta":75,"navigation":33,"path":80,"publishedAt":81,"readingTime":82,"seo":83,"stem":84,"tags":85,"updatedAt":81,"__hash__":87},"articles_en/7-deadly-mistakes-in-product-development-you-must-avoid.md","7 Deadly Mistakes in Product Development You Must Avoid",{"type":9,"value":54,"toc":69},[55,58,62,65,67],[12,56,57],{},"Avoid these 7 deadly mistakes in product development to ensure your project's success.",[16,59,61],{"id":60},"introduction","Introduction",[12,63,64],{},"In the world of product development, mistakes can be very costly. Let's explore the most common mistakes.",[16,66,19],{"id":18},[12,68,22],{},{"title":24,"searchDepth":25,"depth":25,"links":70},[71,72],{"id":60,"depth":28,"text":61},{"id":18,"depth":28,"text":19},"product-development","Comprehensive guide about product development for Arabic entrepreneurs",{"excerpt":76},{"type":9,"value":77},[78],[12,79,57],{},"/7-deadly-mistakes-in-product-development-you-must-avoid","2025-01-07",12,{"title":52,"description":74},"7-deadly-mistakes-in-product-development-you-must-avoid",[73,29,86],"best-practices","RR60V4TeVi223r1Cvoz3F-lKPt1oAVRmUEH39sAx700",{"id":89,"title":90,"author":7,"body":91,"category":29,"description":324,"extension":31,"image":325,"isDraft":34,"isFeatured":33,"locale":35,"meta":326,"navigation":33,"path":334,"publishedAt":335,"readingTime":336,"seo":337,"stem":327,"tags":338,"updatedAt":343,"__hash__":344},"articles_en/a-step-by-step-guide-to-creating-your-saas-brand-with-0.md","A step-by-step guide to creating your SaaS brand with 0$",{"type":9,"value":92,"toc":305},[93,97,100,103,105,108,112,115,120,123,127,130,134,137,141,144,148,151,155,158,162,165,169,179,183,186,189,220,224,236,240,243,246,249,261,280,283,298,302],[16,94,96],{"id":95},"tldr","TL;DR:",[12,98,99],{},"Designing a good-looking website is important for creating a great user experience and increasing conversion rates. The key components that make a website beautiful include using the right colors, typography, and call-to-action buttons, as well as incorporating illustrations, animations, and demos into the design.",[12,101,102],{},"Branding and creating a strong brand identity are also crucial for a successful website. This includes choosing a relevant and memorable name, using the right typography and color palette, and designing a logo that represents your brand. By considering these design elements and creating a cohesive brand identity, you can create a beautiful and effective website.",[16,104,61],{"id":60},[12,106,107],{},"Designing a good-looking website is one of the most complex parts of creating a product. A good-looking interface with a great user experience is one of the most important things about a website. Beautiful websites have a better conversation rate, but what do I mean by beautiful websites?",[16,109,111],{"id":110},"beautiful-websites-keys","Beautiful websites keys",[12,113,114],{},"After analyzing more than 100 of the most successful startup websites, I conclude that most websites have these keys that let their websites stand out in the crowd.",[116,117,119],"h3",{"id":118},"colors","Colors",[12,121,122],{},"Colors play an important role in any website. They can convey different emotions and tones, speak to different audiences, and communicate actions. The color should be relevant to the product I highlight. It is a must for a brand to stand out choose its color wisely, to settle its meaning in the customer's subconscious.",[116,124,126],{"id":125},"typography","Typography",[12,128,129],{},"Almost 90% of website content is made of typography. Good typography will establish a powerful visual hierarchy, provide graphic balance, and set the product's overall tone. I can add a special touch to the product through font type, alignment, text size, and weight.",[116,131,133],{"id":132},"call-to-action","Call to Action",[12,135,136],{},"Having provocative Call to Action buttons makes the website look more admirable and increases the click rate. They let the user know what to do next, such as sign up for a newsletter or purchase a product. Buttons without a clear call to action, users are likely to leave the website without accomplishing their tasks.",[116,138,140],{"id":139},"illustrations","Illustrations",[12,142,143],{},"Whether I use eye-catching graphics or vector designs, these illustrations help create a memorable site. Keeping them informative and straightforward, can add uniqueness, personality, and a sense of warmth to the website.",[116,145,147],{"id":146},"animations","Animations",[12,149,150],{},"Animations are not just for cartoons anymore. From full-screen moving images to minor hover effects, touches of animation are popping up everywhere. Animations are trendy, fun, and user-friendly.",[116,152,154],{"id":153},"demos","Demos",[12,156,157],{},"Demos are live previews of what I can do with this product. Instead of creating a free account to only test the features and decide whether I find this helpful product or not, I can embed short demos of the product on the landing page. Users tend to participate when they like what they see.",[16,159,161],{"id":160},"brand","Brand",[12,163,164],{},"Branding is a crucial aspect of any Saas, and a strong brand identity is essential. A cohesive brand identity helps customers to easily recognize and remember your brand and sets the tone for your business. let's dive into the tools that will help us establish a solid brand.",[116,166,168],{"id":167},"name","Name",[12,170,171,172],{},"One of the first steps in establishing a strong brand identity is choosing a relevant and memorable name. This name should accurately reflect the products or services you offer, and be easy for customers to remember and pronounce. I recommend getting inspiration from ",[173,174,178],"a",{"href":175,"rel":176},"https://namelix.com/",[177],"nofollow","namelix.com",[116,180,182],{"id":181},"typography-colors","Typography & Colors",[12,184,185],{},"One of the key components of a strong brand identity is choosing the right typography and color palette. These design elements should be coherent with the overall tone and aesthetic of your brand and should be used consistently across all of your marketing materials. This helps to create a cohesive and professional look for your website and other marketing materials.",[12,187,188],{},"these are my three favorite tools to do it:",[190,191,192,201,209,217],"ul",{},[193,194,195,200],"li",{},[173,196,199],{"href":197,"rel":198},"https://coolors.co",[177],"Coolors",": They call it the super fast color schemes generator. Instantly create beautiful color palettes that you can adjust and refine, to then, export and use on your side project.",[193,202,203,208],{},[173,204,207],{"href":205,"rel":206},"https://colorhunt.co/",[177],"Color Hunt",": A collection of hundreds of color palettes, created and voted by users. choose your favorite one and start using it!",[193,210,211,216],{},[173,212,215],{"href":213,"rel":214},"https://colors.eva.design/",[177],"Eva Design System",": Deep learning color generator. Believe me, you won't mess it up after using them.",[193,218,219],{},"Google fonts: A collection of free to use fonts.",[116,221,223],{"id":222},"logo","Logo",[12,225,226,227,230,235],{},"Your logo should be unique, memorable, and easily recognizable. It should accurately represent the essence of your brand and be able to be used across a variety of different mediums. You can use these tools for inspiration:",[228,229],"br",{},[173,231,234],{"href":232,"rel":233},"https://logopond.com/",[177],"Logopond",": It is an inspirational site that showcases logo work from designers of varying abilities all across the world.",[116,237,239],{"id":238},"website","Website",[12,241,242],{},"Designing a website is a hard task. But I have already analyzed but I got you to focus on these and you will create an attractive one:",[12,244,245],{},"Gorgeous Colors: You can get them with the tools given above. And remember gradients are always a safe option.",[12,247,248],{},"Clear Typography: Many of the Google fonts are okay. I'm a fan of the Sans serif family they always look good - Poppins, Lato, Noto...)",[12,250,251,252,254,255,260],{},"Provocative Call to Action: Add provocative buttons that attract users! You",[228,253],{},"\ncan find some inspiration ",[173,256,259],{"href":257,"rel":258},"https://blog.hubspot.com/marketing/call-to-action-examples",[177],"here",".",[12,262,263,264,269,270,269,275],{},"Wonderful Illustrations: Creating great illustrations is a complicated task. You can find great illustrations in ",[173,265,268],{"href":266,"rel":267},"https://undraw.co/",[177],"Undraw",", ",[173,271,274],{"href":272,"rel":273},"https://www.freepik.com/",[177],"Freepik",[173,276,279],{"href":277,"rel":278},"https://pixabay.com/illustrations/",[177],"Pixabay",[12,281,282],{},"Brilliant Animations: Make your website interactive.",[12,284,285,286,291,292,297],{},"You can use ",[173,287,290],{"href":288,"rel":289},"https://www.figma.com",[177],"Figma",", and ",[173,293,296],{"href":294,"rel":295},"https://www.adobe.com/products/xd.html",[177],"AdobeXD"," to make your own design.",[16,299,301],{"id":300},"conclusion","Conclusion",[12,303,304],{},"In conclusion, designing a beautiful and effective website requires considering key elements such as colors, typography, call-to-action buttons, illustrations, animations, and demos. In addition, a strong brand identity, including a relevant and memorable name, appropriate typography and color palette, and a well-designed logo, is essential for a successful website. By considering these design elements and creating a cohesive brand identity, you can create a website that stands out in the crowd and provides a great user experience for your customers.",{"title":24,"searchDepth":25,"depth":25,"links":306},[307,308,309,317,323],{"id":95,"depth":28,"text":96},{"id":60,"depth":28,"text":61},{"id":110,"depth":28,"text":111,"children":310},[311,312,313,314,315,316],{"id":118,"depth":25,"text":119},{"id":125,"depth":25,"text":126},{"id":132,"depth":25,"text":133},{"id":139,"depth":25,"text":140},{"id":146,"depth":25,"text":147},{"id":153,"depth":25,"text":154},{"id":160,"depth":28,"text":161,"children":318},[319,320,321,322],{"id":167,"depth":25,"text":168},{"id":181,"depth":25,"text":182},{"id":222,"depth":25,"text":223},{"id":238,"depth":25,"text":239},{"id":300,"depth":28,"text":301},"Designing a good-looking website is important for creating a great user experience and increasing conversion rates. The key components include using the right colors, typos, and CTA buttons, as well as incorporating illustrations, animations, and demos into the design.","https://images.unsplash.com/photo-1649015931204-15a3c789e6ea?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDZ8fGd1aWRlJTIwYnJhbmQlMjBidXNpbmVzc3xlbnwwfHx8fDE2NzEwMjkzMzM&ixlib=rb-4.0.3&q=80&w=2000",{"slug":327,"excerpt":328},"a-step-by-step-guide-to-creating-your-saas-brand-with-0",{"type":9,"value":329},[330,332],[16,331,96],{"id":95},[12,333,99],{},"/a-step-by-step-guide-to-creating-your-saas-brand-with-0","2022-12-14T14:58:05.000Z",5,{"title":90,"description":324},[339,340,341,29,342],"go","ui-ux","learning","ai","2022-12-15T22:29:01.000Z","U58xOSK9wBQRvfEadoeX9BjOaPikddJyP90xkHCmbBY",{"id":346,"title":347,"author":7,"body":348,"category":342,"description":360,"extension":31,"image":361,"isDraft":33,"isFeatured":34,"locale":35,"meta":362,"navigation":33,"path":367,"publishedAt":368,"readingTime":369,"seo":370,"stem":371,"tags":372,"updatedAt":368,"__hash__":376},"articles_en/ai-basics-for-developers.md","AI Basics for Developers",{"type":9,"value":349,"toc":357},[350,353,355],[12,351,352],{},"Learn AI basics to develop smart and innovative applications.",[16,354,19],{"id":18},[12,356,22],{},{"title":24,"searchDepth":25,"depth":25,"links":358},[359],{"id":18,"depth":28,"text":19},"Comprehensive guide about technical education for Arabic entrepreneurs","https://images.unsplash.com/photo-1677442136019-21780ecad995?q=80&w=1200&auto=format&fit=crop",{"excerpt":363},{"type":9,"value":364},[365],[12,366,352],{},"/ai-basics-for-developers","2025-04-22",14,{"title":347,"description":360},"ai-basics-for-developers",[342,373,374,375],"development","machine-learning","programming","PTw_jzJONrwa8myWeKLfPuAL_9uqg6_nbdlUQ7tJ57U",{"id":378,"title":379,"author":7,"body":380,"category":29,"description":1741,"extension":31,"image":1742,"isDraft":34,"isFeatured":33,"locale":35,"meta":1743,"navigation":33,"path":1748,"publishedAt":1749,"readingTime":1750,"seo":1751,"stem":1752,"tags":1753,"updatedAt":1749,"__hash__":1760},"articles_en/ai-tools-accelerate-startup.md","How to Use AI Tools to Accelerate Your Startup in 2025: A Comprehensive Guide",{"type":9,"value":381,"toc":1694},[382,385,389,392,425,429,432,436,441,472,478,484,488,493,506,511,524,529,542,547,560,564,569,597,602,627,631,634,638,643,669,674,689,693,698,724,729,743,747,752,780,786,800,804,807,811,816,842,847,861,867,871,876,901,906,918,922,927,952,957,983,987,990,994,999,1025,1030,1044,1048,1053,1079,1084,1098,1102,1107,1133,1138,1152,1156,1161,1187,1191,1208,1212,1217,1243,1247,1261,1265,1270,1296,1300,1314,1318,1323,1349,1354,1368,1372,1376,1390,1394,1408,1412,1426,1430,1445,1449,1453,1464,1468,1482,1486,1500,1504,1518,1522,1536,1540,1544,1570,1574,1599,1603,1641,1645,1648,1680,1682,1685,1691],[12,383,384],{},"Artificial Intelligence (AI) is no longer a futuristic buzzword; it's a transformative force revolutionizing how startups operate, innovate, and scale. In 2025, leveraging AI tools effectively can be the critical differentiator between a struggling startup and a thriving market leader. This comprehensive guide explores practical ways to integrate AI into your startup's DNA for accelerated growth, data-driven decisions, and superior product offerings.",[16,386,388],{"id":387},"why-ai-matters-for-startups-now-more-than-ever","Why AI Matters for Startups Now More Than Ever",[12,390,391],{},"The startup landscape has fundamentally changed. With AI democratization, even bootstrapped startups can access tools that were previously available only to well-funded enterprises. The key advantages include:",[190,393,394,401,407,413,419],{},[193,395,396,400],{},[397,398,399],"strong",{},"Cost Efficiency:"," Automate tasks that would require hiring additional team members",[193,402,403,406],{},[397,404,405],{},"Speed to Market:"," Accelerate product development and iteration cycles",[193,408,409,412],{},[397,410,411],{},"Data-Driven Insights:"," Make informed decisions based on real-time analytics",[193,414,415,418],{},[397,416,417],{},"Competitive Edge:"," Deliver personalized experiences at scale",[193,420,421,424],{},[397,422,423],{},"24/7 Operations:"," Provide round-the-clock service without human intervention",[16,426,428],{"id":427},"_1-automate-routine-work-and-boost-efficiency","1. Automate Routine Work and Boost Efficiency",[12,430,431],{},"Repetitive, time-consuming tasks can drain valuable resources from your core team. AI-powered automation can take over these responsibilities, freeing up your talent to focus on strategic initiatives.",[116,433,435],{"id":434},"a-customer-support-and-engagement","A. Customer Support and Engagement",[12,437,438],{},[397,439,440],{},"AI Chatbots and Virtual Assistants:",[190,442,443,449],{},[193,444,445,448],{},[397,446,447],{},"Tools:"," Intercom, Drift, ChatBot, Dialogflow, Rasa (open-source)",[193,450,451,454,455],{},[397,452,453],{},"Implementation:"," Deploy conversational AI that can:\n",[190,456,457,460,463,466,469],{},[193,458,459],{},"Answer frequently asked questions instantly",[193,461,462],{},"Qualify leads before they reach your sales team",[193,464,465],{},"Provide product recommendations",[193,467,468],{},"Schedule meetings and demos",[193,470,471],{},"Escalate complex issues to human agents",[12,473,474,477],{},[397,475,476],{},"Real-World Impact:"," Startups report 40-60% reduction in support ticket volume and 70% faster response times using AI chatbots.",[12,479,480,483],{},[397,481,482],{},"Pro Tip:"," Train your chatbot on actual customer conversations and update it regularly based on new queries.",[116,485,487],{"id":486},"b-administrative-and-operational-tasks","B. Administrative and Operational Tasks",[12,489,490],{},[397,491,492],{},"Smart Scheduling:",[190,494,495,500],{},[193,496,497,499],{},[397,498,447],{}," Calendly AI, Motion, Reclaim.ai",[193,501,502,505],{},[397,503,504],{},"Use Cases:"," Automatically find optimal meeting times, manage team calendars, block focus time",[12,507,508],{},[397,509,510],{},"Email Management:",[190,512,513,518],{},[193,514,515,517],{},[397,516,447],{}," SaneBox, Superhuman, Shortwave",[193,519,520,523],{},[397,521,522],{},"Benefits:"," Auto-categorize emails, suggest responses, identify priority messages",[12,525,526],{},[397,527,528],{},"Document Processing:",[190,530,531,536],{},[193,532,533,535],{},[397,534,447],{}," Nanonets, Rossum, Abbyy",[193,537,538,541],{},[397,539,540],{},"Applications:"," Extract data from invoices, receipts, contracts, and forms with 95%+ accuracy",[12,543,544],{},[397,545,546],{},"Meeting Intelligence:",[190,548,549,554],{},[193,550,551,553],{},[397,552,447],{}," Otter.ai, Fireflies.ai, Grain",[193,555,556,559],{},[397,557,558],{},"Value:"," Automatic transcription, action item extraction, meeting summaries",[116,561,563],{"id":562},"c-content-creation-and-management","C. Content Creation and Management",[12,565,566],{},[397,567,568],{},"Writing Assistance:",[190,570,571,576],{},[193,572,573,575],{},[397,574,447],{}," Jasper, Copy.ai, Writesonic, ChatGPT",[193,577,578,580],{},[397,579,504],{},[190,581,582,585,588,591,594],{},[193,583,584],{},"Blog posts and articles",[193,586,587],{},"Social media content",[193,589,590],{},"Email campaigns",[193,592,593],{},"Product descriptions",[193,595,596],{},"Ad copy",[12,598,599],{},[397,600,601],{},"Design and Visual Content:",[190,603,604,609],{},[193,605,606,608],{},[397,607,447],{}," Canva AI, Midjourney, DALL-E 3, Stable Diffusion",[193,610,611,613],{},[397,612,540],{},[190,614,615,618,621,624],{},[193,616,617],{},"Marketing materials",[193,619,620],{},"Social media graphics",[193,622,623],{},"Product mockups",[193,625,626],{},"Presentation slides",[16,628,630],{"id":629},"_2-enhance-decision-making-with-ai-analytics","2. Enhance Decision-Making with AI Analytics",[12,632,633],{},"Data is the lifeblood of any startup. AI-driven analytics can uncover hidden patterns, predict future trends, and empower you to make informed, strategic decisions.",[116,635,637],{"id":636},"a-business-intelligence-and-reporting","A. Business Intelligence and Reporting",[12,639,640],{},[397,641,642],{},"Modern BI Platforms:",[190,644,645,650],{},[193,646,647,649],{},[397,648,447],{}," Tableau with AI, Power BI, Looker, Mixpanel",[193,651,652,655],{},[397,653,654],{},"Capabilities:",[190,656,657,660,663,666],{},[193,658,659],{},"Natural language queries (\"Show me sales trend for last quarter\")",[193,661,662],{},"Automated anomaly detection",[193,664,665],{},"Predictive forecasting",[193,667,668],{},"Interactive dashboards",[12,670,671],{},[397,672,673],{},"Implementation Strategy:",[675,676,677,680,683,686],"ol",{},[193,678,679],{},"Connect all your data sources (CRM, analytics, finance)",[193,681,682],{},"Define your key metrics (North Star Metric, KPIs)",[193,684,685],{},"Set up automated alerts for significant changes",[193,687,688],{},"Create role-specific dashboards for different team members",[116,690,692],{"id":691},"b-market-research-and-competitive-intelligence","B. Market Research and Competitive Intelligence",[12,694,695],{},[397,696,697],{},"AI-Powered Research Tools:",[190,699,700,705],{},[193,701,702,704],{},[397,703,447],{}," Brandwatch, Talkwalker, Crayon, Kompyte",[193,706,707,710],{},[397,708,709],{},"Insights Gained:",[190,711,712,715,718,721],{},[193,713,714],{},"Competitor product launches and pricing changes",[193,716,717],{},"Market sentiment analysis",[193,719,720],{},"Emerging trends in your industry",[193,722,723],{},"Customer pain points and desires",[12,725,726],{},[397,727,728],{},"Practical Application:",[190,730,731,734,737,740],{},[193,732,733],{},"Monitor competitor websites, social media, and news",[193,735,736],{},"Analyze customer reviews of competing products",[193,738,739],{},"Identify market gaps and opportunities",[193,741,742],{},"Track industry influencers and thought leaders",[116,744,746],{"id":745},"c-predictive-analytics-for-growth","C. Predictive Analytics for Growth",[12,748,749],{},[397,750,751],{},"Forecasting and Prediction:",[190,753,754,759],{},[193,755,756,758],{},[397,757,447],{}," Prophet (by Facebook), DataRobot, H2O.ai",[193,760,761,763],{},[397,762,504],{},[190,764,765,768,771,774,777],{},[193,766,767],{},"Sales forecasting",[193,769,770],{},"Customer churn prediction",[193,772,773],{},"Inventory optimization",[193,775,776],{},"Demand planning",[193,778,779],{},"Cash flow projection",[12,781,782,785],{},[397,783,784],{},"Machine Learning Models:","\nBuild custom ML models for:",[190,787,788,791,794,797],{},[193,789,790],{},"Customer lifetime value (LTV) prediction",[193,792,793],{},"Lead scoring and qualification",[193,795,796],{},"Price optimization",[193,798,799],{},"Personalized recommendations",[16,801,803],{"id":802},"_3-supercharge-product-development-and-innovation","3. Supercharge Product Development and Innovation",[12,805,806],{},"AI can significantly accelerate your product development lifecycle, from ideation to deployment and iteration.",[116,808,810],{"id":809},"a-code-generation-and-development-acceleration","A. Code Generation and Development Acceleration",[12,812,813],{},[397,814,815],{},"AI Coding Assistants:",[190,817,818,824,830,836],{},[193,819,820,823],{},[397,821,822],{},"GitHub Copilot:"," Suggests entire functions, writes boilerplate code, helps with documentation",[193,825,826,829],{},[397,827,828],{},"Tabnine:"," Context-aware code completions across languages",[193,831,832,835],{},[397,833,834],{},"Amazon CodeWhisperer:"," Security-focused code suggestions",[193,837,838,841],{},[397,839,840],{},"Cursor IDE:"," AI-first code editor with advanced editing capabilities",[12,843,844],{},[397,845,846],{},"Best Practices:",[190,848,849,852,855,858],{},[193,850,851],{},"Use AI for repetitive coding tasks and boilerplate",[193,853,854],{},"Review all AI-generated code for security and efficiency",[193,856,857],{},"Leverage AI for documentation and comments",[193,859,860],{},"Combine human creativity with AI speed",[12,862,863,866],{},[397,864,865],{},"Real Results:"," Developers report 30-50% productivity increase using AI coding assistants.",[116,868,870],{"id":869},"b-quality-assurance-and-testing","B. Quality Assurance and Testing",[12,872,873],{},[397,874,875],{},"AI-Enhanced Testing:",[190,877,878,883],{},[193,879,880,882],{},[397,881,447],{}," Testim, Mabl, Applitools, Functionize",[193,884,885,887],{},[397,886,654],{},[190,888,889,892,895,898],{},[193,890,891],{},"Auto-generate test cases",[193,893,894],{},"Visual regression testing",[193,896,897],{},"Self-healing tests (adapt to UI changes)",[193,899,900],{},"Performance testing at scale",[12,902,903],{},[397,904,905],{},"Code Review and Security:",[190,907,908,913],{},[193,909,910,912],{},[397,911,447],{}," Snyk, SonarQube, DeepCode",[193,914,915,917],{},[397,916,522],{}," Identify vulnerabilities, suggest fixes, enforce coding standards",[116,919,921],{"id":920},"c-user-research-and-feedback-analysis","C. User Research and Feedback Analysis",[12,923,924],{},[397,925,926],{},"Sentiment Analysis and NLP:",[190,928,929,934],{},[193,930,931,933],{},[397,932,447],{}," MonkeyLearn, Lexalytics, IBM Watson",[193,935,936,938],{},[397,937,540],{},[190,939,940,943,946,949],{},[193,941,942],{},"Analyze customer support tickets",[193,944,945],{},"Process survey responses",[193,947,948],{},"Monitor app store reviews",[193,950,951],{},"Understand social media sentiment",[12,953,954],{},[397,955,956],{},"User Behavior Analytics:",[190,958,959,964],{},[193,960,961,963],{},[397,962,447],{}," Hotjar, FullStory, Heap",[193,965,966,969],{},[397,967,968],{},"Insights:",[190,970,971,974,977,980],{},[193,972,973],{},"Session recordings with AI highlights",[193,975,976],{},"Automatic funnel analysis",[193,978,979],{},"User journey mapping",[193,981,982],{},"Frustration detection",[16,984,986],{"id":985},"_4-revolutionize-marketing-and-personalization","4. Revolutionize Marketing and Personalization",[12,988,989],{},"AI enables hyper-personalized marketing campaigns and customer experiences, leading to higher engagement and conversion rates.",[116,991,993],{"id":992},"a-content-strategy-and-creation","A. Content Strategy and Creation",[12,995,996],{},[397,997,998],{},"AI Content Tools:",[190,1000,1001,1007,1013,1019],{},[193,1002,1003,1006],{},[397,1004,1005],{},"Blog and Long-form:"," Jasper, Copy.ai, Writesonic",[193,1008,1009,1012],{},[397,1010,1011],{},"Social Media:"," Buffer AI, Hootsuite Insights, Lately",[193,1014,1015,1018],{},[397,1016,1017],{},"Video:"," Synthesia, D-ID, Pictory",[193,1020,1021,1024],{},[397,1022,1023],{},"Voice:"," Descript, Murf.ai",[12,1026,1027],{},[397,1028,1029],{},"Content Calendar Automation:",[190,1031,1032,1035,1038,1041],{},[193,1033,1034],{},"Use AI to analyze trending topics",[193,1036,1037],{},"Generate content ideas based on search data",[193,1039,1040],{},"Optimize publishing times for maximum engagement",[193,1042,1043],{},"A/B test headlines and formats",[116,1045,1047],{"id":1046},"b-targeted-advertising-and-campaign-optimization","B. Targeted Advertising and Campaign Optimization",[12,1049,1050],{},[397,1051,1052],{},"Ad Platform AI:",[190,1054,1055,1061,1067,1073],{},[193,1056,1057,1060],{},[397,1058,1059],{},"Google Ads Smart Bidding:"," Automated bid strategies using machine learning",[193,1062,1063,1066],{},[397,1064,1065],{},"Facebook Ads Advantage+:"," AI-powered campaign creation and optimization",[193,1068,1069,1072],{},[397,1070,1071],{},"Madgicx:"," AI-powered ad analytics and automation",[193,1074,1075,1078],{},[397,1076,1077],{},"AdCreative.ai:"," Generate high-converting ad creatives",[12,1080,1081],{},[397,1082,1083],{},"Optimization Strategies:",[190,1085,1086,1089,1092,1095],{},[193,1087,1088],{},"Let AI handle bid adjustments based on conversion likelihood",[193,1090,1091],{},"Test multiple ad variations simultaneously",[193,1093,1094],{},"Target lookalike audiences using AI matching",[193,1096,1097],{},"Automate budget allocation across campaigns",[116,1099,1101],{"id":1100},"c-email-marketing-and-personalization","C. Email Marketing and Personalization",[12,1103,1104],{},[397,1105,1106],{},"AI Email Tools:",[190,1108,1109,1115,1121,1127],{},[193,1110,1111,1114],{},[397,1112,1113],{},"Mailchimp with AI:"," Subject line suggestions, send time optimization",[193,1116,1117,1120],{},[397,1118,1119],{},"Phrasee:"," AI-powered email copy generation",[193,1122,1123,1126],{},[397,1124,1125],{},"Seventh Sense:"," Optimal send time prediction",[193,1128,1129,1132],{},[397,1130,1131],{},"Rasa.io:"," Personalized newsletter curation",[12,1134,1135],{},[397,1136,1137],{},"Advanced Tactics:",[190,1139,1140,1143,1146,1149],{},[193,1141,1142],{},"Behavioral trigger emails based on user actions",[193,1144,1145],{},"Dynamic content blocks that adapt to recipient",[193,1147,1148],{},"Predictive sending based on open probability",[193,1150,1151],{},"Automated re-engagement campaigns",[116,1153,1155],{"id":1154},"d-seo-and-search-visibility","D. SEO and Search Visibility",[12,1157,1158],{},[397,1159,1160],{},"AI SEO Tools:",[190,1162,1163,1169,1175,1181],{},[193,1164,1165,1168],{},[397,1166,1167],{},"SurferSEO:"," Content optimization based on top-ranking pages",[193,1170,1171,1174],{},[397,1172,1173],{},"MarketMuse:"," Content planning and gap analysis",[193,1176,1177,1180],{},[397,1178,1179],{},"Frase:"," AI research and content briefs",[193,1182,1183,1186],{},[397,1184,1185],{},"Clearscope:"," Content optimization recommendations",[12,1188,1189],{},[397,1190,453],{},[675,1192,1193,1196,1199,1202,1205],{},[193,1194,1195],{},"Research keywords with AI-powered tools",[193,1197,1198],{},"Analyze competitor content structure",[193,1200,1201],{},"Generate content outlines",[193,1203,1204],{},"Optimize existing content",[193,1206,1207],{},"Monitor rankings and adjust",[16,1209,1211],{"id":1210},"_5-financial-management-and-planning","5. Financial Management and Planning",[12,1213,1214],{},[397,1215,1216],{},"AI Finance Tools:",[190,1218,1219,1225,1231,1237],{},[193,1220,1221,1224],{},[397,1222,1223],{},"Forecasting:"," Jirav, Causal, Finmark",[193,1226,1227,1230],{},[397,1228,1229],{},"Expense Management:"," Expensify, Ramp",[193,1232,1233,1236],{},[397,1234,1235],{},"Accounting:"," QuickBooks AI, Xero",[193,1238,1239,1242],{},[397,1240,1241],{},"Fraud Detection:"," Sift, Forter",[12,1244,1245],{},[397,1246,504],{},[190,1248,1249,1252,1255,1258],{},[193,1250,1251],{},"Automated expense categorization",[193,1253,1254],{},"Cash flow forecasting",[193,1256,1257],{},"Anomaly detection in transactions",[193,1259,1260],{},"Invoice processing and payment reminders",[16,1262,1264],{"id":1263},"_6-hiring-and-talent-management","6. Hiring and Talent Management",[12,1266,1267],{},[397,1268,1269],{},"AI Recruitment Tools:",[190,1271,1272,1278,1284,1290],{},[193,1273,1274,1277],{},[397,1275,1276],{},"Screening:"," HireVue, Pymetrics",[193,1279,1280,1283],{},[397,1281,1282],{},"Sourcing:"," SeekOut, Findem",[193,1285,1286,1289],{},[397,1287,1288],{},"Scheduling:"," Calendly, GoodTime",[193,1291,1292,1295],{},[397,1293,1294],{},"Assessment:"," Codility (for developers), TestGorilla",[12,1297,1298],{},[397,1299,522],{},[190,1301,1302,1305,1308,1311],{},[193,1303,1304],{},"Reduce time-to-hire by 50%",[193,1306,1307],{},"Eliminate unconscious bias",[193,1309,1310],{},"Improve candidate matching",[193,1312,1313],{},"Automate initial screening",[16,1315,1317],{"id":1316},"_7-customer-success-and-retention","7. Customer Success and Retention",[12,1319,1320],{},[397,1321,1322],{},"AI for Customer Success:",[190,1324,1325,1331,1337,1343],{},[193,1326,1327,1330],{},[397,1328,1329],{},"Health Scoring:"," Gainsight, ChurnZero",[193,1332,1333,1336],{},[397,1334,1335],{},"Proactive Outreach:"," Automated at-risk alerts",[193,1338,1339,1342],{},[397,1340,1341],{},"Usage Analytics:"," Identify power users and detractors",[193,1344,1345,1348],{},[397,1346,1347],{},"Personalized Onboarding:"," Adaptive learning paths",[12,1350,1351],{},[397,1352,1353],{},"Retention Strategies:",[190,1355,1356,1359,1362,1365],{},[193,1357,1358],{},"Predict churn before it happens",[193,1360,1361],{},"Automate check-ins with at-risk customers",[193,1363,1364],{},"Personalize upgrade recommendations",[193,1366,1367],{},"Identify expansion opportunities",[16,1369,1371],{"id":1370},"implementation-roadmap-getting-started-with-ai","Implementation Roadmap: Getting Started with AI",[116,1373,1375],{"id":1374},"phase-1-quick-wins-month-1-2","Phase 1: Quick Wins (Month 1-2)",[675,1377,1378,1381,1384,1387],{},[193,1379,1380],{},"Implement AI chatbot for customer support",[193,1382,1383],{},"Add AI writing assistant for content creation",[193,1385,1386],{},"Set up AI email marketing tools",[193,1388,1389],{},"Deploy code completion AI for development team",[116,1391,1393],{"id":1392},"phase-2-operational-efficiency-month-3-4","Phase 2: Operational Efficiency (Month 3-4)",[675,1395,1396,1399,1402,1405],{"start":336},[193,1397,1398],{},"Integrate BI tools with AI analytics",[193,1400,1401],{},"Set up automated testing frameworks",[193,1403,1404],{},"Implement document processing AI",[193,1406,1407],{},"Add meeting transcription and summarization",[116,1409,1411],{"id":1410},"phase-3-strategic-integration-month-5-6","Phase 3: Strategic Integration (Month 5-6)",[675,1413,1414,1417,1420,1423],{"start":43},[193,1415,1416],{},"Build predictive models for sales and churn",[193,1418,1419],{},"Deploy personalization engine",[193,1421,1422],{},"Implement AI-powered ad optimization",[193,1424,1425],{},"Set up automated financial forecasting",[116,1427,1429],{"id":1428},"phase-4-advanced-capabilities-month-7","Phase 4: Advanced Capabilities (Month 7+)",[675,1431,1433,1436,1439,1442],{"start":1432},13,[193,1434,1435],{},"Custom ML models for your specific needs",[193,1437,1438],{},"Advanced automation workflows",[193,1440,1441],{},"AI-driven product features",[193,1443,1444],{},"Continuous optimization and refinement",[16,1446,1448],{"id":1447},"best-practices-for-ai-adoption","Best Practices for AI Adoption",[116,1450,1452],{"id":1451},"_1-start-small-think-big","1. Start Small, Think Big",[190,1454,1455,1458,1461],{},[193,1456,1457],{},"Begin with one tool or use case",[193,1459,1460],{},"Measure results and ROI",[193,1462,1463],{},"Expand gradually based on success",[116,1465,1467],{"id":1466},"_2-invest-in-team-training","2. Invest in Team Training",[190,1469,1470,1473,1476,1479],{},[193,1471,1472],{},"Educate team on AI capabilities",[193,1474,1475],{},"Provide hands-on training",[193,1477,1478],{},"Encourage experimentation",[193,1480,1481],{},"Share success stories internally",[116,1483,1485],{"id":1484},"_3-data-is-everything","3. Data is Everything",[190,1487,1488,1491,1494,1497],{},[193,1489,1490],{},"Ensure data quality and consistency",[193,1492,1493],{},"Set up proper data pipelines",[193,1495,1496],{},"Implement tracking from day one",[193,1498,1499],{},"Respect privacy and compliance (GDPR, etc.)",[116,1501,1503],{"id":1502},"_4-human-ai-collaboration","4. Human-AI Collaboration",[190,1505,1506,1509,1512,1515],{},[193,1507,1508],{},"AI augments, doesn't replace humans",[193,1510,1511],{},"Keep humans in the loop for critical decisions",[193,1513,1514],{},"Use AI for insights, humans for strategy",[193,1516,1517],{},"Combine creativity with automation",[116,1519,1521],{"id":1520},"_5-monitor-and-optimize","5. Monitor and Optimize",[190,1523,1524,1527,1530,1533],{},[193,1525,1526],{},"Track AI tool performance",[193,1528,1529],{},"A/B test AI vs. non-AI approaches",[193,1531,1532],{},"Regularly update and refine models",[193,1534,1535],{},"Stay current with new AI developments",[16,1537,1539],{"id":1538},"cost-considerations-and-roi","Cost Considerations and ROI",[116,1541,1543],{"id":1542},"budget-allocation","Budget Allocation",[190,1545,1546,1552,1558,1564],{},[193,1547,1548,1551],{},[397,1549,1550],{},"Freemium Tools:"," Start with free tiers (ChatGPT, Canva)",[193,1553,1554,1557],{},[397,1555,1556],{},"Essential Tools:"," $50-200/month (Jasper, Otter.ai)",[193,1559,1560,1563],{},[397,1561,1562],{},"Professional Tools:"," $200-1000/month (Salesforce Einstein, HubSpot AI)",[193,1565,1566,1569],{},[397,1567,1568],{},"Enterprise Tools:"," $1000+/month (custom ML, advanced analytics)",[116,1571,1573],{"id":1572},"expected-roi","Expected ROI",[190,1575,1576,1582,1588,1594],{},[193,1577,1578,1581],{},[397,1579,1580],{},"Time Savings:"," 10-40 hours/week per team member",[193,1583,1584,1587],{},[397,1585,1586],{},"Cost Reduction:"," 30-50% in operational expenses",[193,1589,1590,1593],{},[397,1591,1592],{},"Revenue Impact:"," 15-30% increase in conversion rates",[193,1595,1596,1598],{},[397,1597,405],{}," 2-3x faster product iterations",[16,1600,1602],{"id":1601},"common-pitfalls-to-avoid","Common Pitfalls to Avoid",[675,1604,1605,1611,1617,1623,1629,1635],{},[193,1606,1607,1610],{},[397,1608,1609],{},"Tool Overload:"," Don't adopt every AI tool; choose strategically",[193,1612,1613,1616],{},[397,1614,1615],{},"Neglecting Data Quality:"," Garbage in, garbage out",[193,1618,1619,1622],{},[397,1620,1621],{},"Over-Automation:"," Some tasks still need human touch",[193,1624,1625,1628],{},[397,1626,1627],{},"Ignoring Ethics:"," Consider bias, privacy, and transparency",[193,1630,1631,1634],{},[397,1632,1633],{},"No Clear Metrics:"," Define success criteria upfront",[193,1636,1637,1640],{},[397,1638,1639],{},"Skipping Training:"," Team adoption is crucial for success",[16,1642,1644],{"id":1643},"the-future-of-ai-in-startups","The Future of AI in Startups",[12,1646,1647],{},"Looking ahead, AI will become even more integral:",[190,1649,1650,1656,1662,1668,1674],{},[193,1651,1652,1655],{},[397,1653,1654],{},"Autonomous Agents:"," AI that can execute complex multi-step tasks",[193,1657,1658,1661],{},[397,1659,1660],{},"Multi-Modal AI:"," Systems that understand text, images, video, and voice",[193,1663,1664,1667],{},[397,1665,1666],{},"Personalization at Scale:"," Truly 1:1 customer experiences",[193,1669,1670,1673],{},[397,1671,1672],{},"AI-First Products:"," Products built with AI as core functionality",[193,1675,1676,1679],{},[397,1677,1678],{},"Predictive Everything:"," From hiring to market trends",[16,1681,301],{"id":300},[12,1683,1684],{},"By strategically integrating AI into every facet of your startup, you can unlock unprecedented levels of efficiency, innovation, and growth. The startups that will thrive in 2025 and beyond are those that view AI not as a tool, but as a core competitive advantage and a fundamental part of their DNA.",[12,1686,1687,1690],{},[397,1688,1689],{},"Remember:"," The best time to start adopting AI was yesterday. The second-best time is today. Begin your AI journey now, start small, learn fast, and scale what works. The future belongs to startups that embrace the power of artificial intelligence while maintaining the human creativity, empathy, and vision that make great companies truly exceptional.",[12,1692,1693],{},"Your AI-accelerated startup journey starts now. Which tool will you implement first?",{"title":24,"searchDepth":25,"depth":25,"links":1695},[1696,1697,1702,1707,1712,1718,1719,1720,1721,1727,1734,1738,1739,1740],{"id":387,"depth":28,"text":388},{"id":427,"depth":28,"text":428,"children":1698},[1699,1700,1701],{"id":434,"depth":25,"text":435},{"id":486,"depth":25,"text":487},{"id":562,"depth":25,"text":563},{"id":629,"depth":28,"text":630,"children":1703},[1704,1705,1706],{"id":636,"depth":25,"text":637},{"id":691,"depth":25,"text":692},{"id":745,"depth":25,"text":746},{"id":802,"depth":28,"text":803,"children":1708},[1709,1710,1711],{"id":809,"depth":25,"text":810},{"id":869,"depth":25,"text":870},{"id":920,"depth":25,"text":921},{"id":985,"depth":28,"text":986,"children":1713},[1714,1715,1716,1717],{"id":992,"depth":25,"text":993},{"id":1046,"depth":25,"text":1047},{"id":1100,"depth":25,"text":1101},{"id":1154,"depth":25,"text":1155},{"id":1210,"depth":28,"text":1211},{"id":1263,"depth":28,"text":1264},{"id":1316,"depth":28,"text":1317},{"id":1370,"depth":28,"text":1371,"children":1722},[1723,1724,1725,1726],{"id":1374,"depth":25,"text":1375},{"id":1392,"depth":25,"text":1393},{"id":1410,"depth":25,"text":1411},{"id":1428,"depth":25,"text":1429},{"id":1447,"depth":28,"text":1448,"children":1728},[1729,1730,1731,1732,1733],{"id":1451,"depth":25,"text":1452},{"id":1466,"depth":25,"text":1467},{"id":1484,"depth":25,"text":1485},{"id":1502,"depth":25,"text":1503},{"id":1520,"depth":25,"text":1521},{"id":1538,"depth":28,"text":1539,"children":1735},[1736,1737],{"id":1542,"depth":25,"text":1543},{"id":1572,"depth":25,"text":1573},{"id":1601,"depth":28,"text":1602},{"id":1643,"depth":28,"text":1644},{"id":300,"depth":28,"text":301},"A comprehensive, practical guide to leveraging cutting-edge AI tools for faster growth, smarter decisions, and innovative products in your startup. Learn which tools to use, when to use them, and how to maximize their impact.","https://images.unsplash.com/photo-1591696331111-ef9586a5b17a?q=80&w=1200&auto=format&fit=crop",{"excerpt":1744},{"type":9,"value":1745},[1746],[12,1747,384],{},"/ai-tools-accelerate-startup","2025-05-16",16,{"title":379,"description":1741},"ai-tools-accelerate-startup",[342,1754,1755,1756,1757,1758,374,1759,47],"startup","tools","automation","growth","innovation","productivity","wsIgx_Ti-_TllLEoTs7reGn4fWFOgPGMzW3LrIUhJw0",{"id":1762,"title":1763,"author":7,"body":1764,"category":373,"description":360,"extension":31,"image":1776,"isDraft":33,"isFeatured":34,"locale":35,"meta":1777,"navigation":33,"path":1782,"publishedAt":1783,"readingTime":1784,"seo":1785,"stem":1786,"tags":1787,"updatedAt":1783,"__hash__":1789},"articles_en/application-security-a-comprehensive-guide-for-arab-developers.md","Application Security: A Comprehensive Guide for Arab Developers",{"type":9,"value":1765,"toc":1773},[1766,1769,1771],[12,1767,1768],{},"Application security is not optional, but a necessity in our digital world.",[16,1770,19],{"id":18},[12,1772,22],{},{"title":24,"searchDepth":25,"depth":25,"links":1774},[1775],{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1563986768609-322da13575f3?q=80&w=1200&auto=format&fit=crop",{"excerpt":1778},{"type":9,"value":1779},[1780],[12,1781,1768],{},"/application-security-a-comprehensive-guide-for-arab-developers","2025-03-25",11,{"title":1763,"description":360},"application-security-a-comprehensive-guide-for-arab-developers",[373,1788,375,86],"cybersecurity","O2GcQlhuNjCr-9R9o1uZsLCzRXNt4mhltacmlMr54lI",{"id":1791,"title":1792,"author":7,"body":1793,"category":1829,"description":1830,"extension":31,"image":1831,"isDraft":33,"isFeatured":34,"locale":35,"meta":1832,"navigation":33,"path":1837,"publishedAt":1838,"readingTime":1839,"seo":1840,"stem":1841,"tags":1842,"updatedAt":1838,"__hash__":1846},"articles_en/arabian-hood-mobile-app-case-study.md","Arabian Hood: A Duolingo-Like App for Arabic Learning",{"type":9,"value":1794,"toc":1823},[1795,1798,1802,1805,1809,1811,1815,1817,1821],[12,1796,1797],{},"Exploring the development journey of Arabian Hood, a specialized mobile application for learning Arabic tailored for specific needs like Hajj.",[16,1799,1801],{"id":1800},"problem-discovery","Problem Discovery",[12,1803,1804],{},"Content under development...",[16,1806,1808],{"id":1807},"solution-design","Solution Design",[12,1810,1804],{},[16,1812,1814],{"id":1813},"development-process","Development Process",[12,1816,1804],{},[16,1818,1820],{"id":1819},"launch-and-growth","Launch and Growth",[12,1822,1804],{},{"title":24,"searchDepth":25,"depth":25,"links":1824},[1825,1826,1827,1828],{"id":1800,"depth":28,"text":1801},{"id":1807,"depth":28,"text":1808},{"id":1813,"depth":28,"text":1814},{"id":1819,"depth":28,"text":1820},"case-study","Case study of Arabian Hood, a mobile application similar to Duolingo, designed to teach Arabic for specific purposes like Hajj.","https://images.unsplash.com/photo-1512486130939-2c4f79935e4f?q=80&w=1200&auto=format&fit=crop",{"excerpt":1833},{"type":9,"value":1834},[1835],[12,1836,1797],{},"/arabian-hood-mobile-app-case-study","2025-01-10",20,{"title":1792,"description":1830},"arabian-hood-mobile-app-case-study",[1829,73,1843,1844,1845],"mobile-app","arabic-language","edtech","uPByhlPw4HGV3vzQxNhBSqp-NthrkT06w15PUDuX7rE",{"id":1848,"title":1849,"author":7,"body":1850,"category":373,"description":360,"extension":31,"image":1862,"isDraft":33,"isFeatured":34,"locale":35,"meta":1863,"navigation":33,"path":1868,"publishedAt":1869,"readingTime":43,"seo":1870,"stem":1871,"tags":1872,"updatedAt":1869,"__hash__":1875},"articles_en/best-devops-practices-for-startups.md","Best DevOps Practices for Startups",{"type":9,"value":1851,"toc":1859},[1852,1855,1857],[12,1853,1854],{},"Implementing DevOps practices speeds up development and improves quality.",[16,1856,19],{"id":18},[12,1858,22],{},{"title":24,"searchDepth":25,"depth":25,"links":1860},[1861],{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1618401471353-b98afee0b2eb?q=80&w=1200&auto=format&fit=crop",{"excerpt":1864},{"type":9,"value":1865},[1866],[12,1867,1854],{},"/best-devops-practices-for-startups","2025-04-01",{"title":1849,"description":360},"best-devops-practices-for-startups",[373,1873,29,1874],"devops","infrastructure","bB3vJMjFvmZNwTafp7_B5KoR_mIz-3TAUW4s9n5D2kU",{"id":1877,"title":1878,"author":7,"body":1879,"category":373,"description":360,"extension":31,"image":1891,"isDraft":33,"isFeatured":34,"locale":35,"meta":1892,"navigation":33,"path":1897,"publishedAt":1898,"readingTime":1750,"seo":1899,"stem":1900,"tags":1901,"updatedAt":1898,"__hash__":1903},"articles_en/best-practices-for-clean-code.md","Best Practices for Clean Code",{"type":9,"value":1880,"toc":1888},[1881,1884,1886],[12,1882,1883],{},"Clean code means readable, maintainable, and scalable code.",[16,1885,19],{"id":18},[12,1887,22],{},{"title":24,"searchDepth":25,"depth":25,"links":1889},[1890],{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1461749280684-dccba630e2f6?q=80&w=1200&auto=format&fit=crop",{"excerpt":1893},{"type":9,"value":1894},[1895],[12,1896,1883],{},"/best-practices-for-clean-code","2025-04-29",{"title":1878,"description":360},"best-practices-for-clean-code",[373,375,1902,86],"clean-code","-3LwB2n1fEo7d2stRdEPKugnLHCB1l3hSzQVKfQ16lM",{"id":1905,"title":1906,"author":7,"body":1907,"category":373,"description":1911,"extension":31,"image":2063,"isDraft":34,"isFeatured":34,"locale":35,"meta":2064,"navigation":33,"path":2072,"publishedAt":2073,"readingTime":2074,"seo":2075,"stem":2065,"tags":2076,"updatedAt":2080,"__hash__":2081},"articles_en/best-programming-language-to-learn-in-2023.md","Best Programming Language to Learn in 2023",{"type":9,"value":1908,"toc":2051},[1909,1912,1915,1919,1922,1925,1928,1932,1935,1938,1941,1945,1948,1951,1954,1958,1961,1964,1967,1971,1974,1977,1980,1983,1986,1989,1992,1995,1999,2002,2005,2008,2012,2015,2018,2021,2025,2028,2031,2034,2037,2040,2042,2045,2048],[12,1910,1911],{},"As a beginner programmer, it can be overwhelming to choose which programming language to learn first. With so many options available, it's difficult to know which one will be the most useful and in demand in the coming years.",[12,1913,1914],{},"If you're trying to decide which programming language to learn in 2023, there are a few key factors to consider. In this article, we'll explore some of the top programming languages and discuss why they might be good choices for those looking to get started in the field.",[16,1916,1918],{"id":1917},"python","Python",[12,1920,1921],{},"Python is a popular, high-level programming language known for its simplicity and flexibility. It's often used for web development, data analysis, and scientific computing, and it has a large and active community of developers.",[12,1923,1924],{},"One of the biggest advantages of Python is its readability. Its syntax is straightforward and easy to understand, making it a great choice for beginners. Python also has a wide range of libraries and frameworks, such as Django and Flask, which make it easy to build web applications and perform data analysis.",[12,1926,1927],{},"In terms of job demand, Python is one of the most in-demand programming languages. According to the 2020 Stack Overflow Developer Survey, Python is the third most popular language, and it's frequently used in industries such as finance, healthcare, and technology.",[16,1929,1931],{"id":1930},"javascript","JavaScript",[12,1933,1934],{},"JavaScript is another popular programming language used for web development. It's often used in combination with HTML and CSS to build interactive and dynamic websites.",[12,1936,1937],{},"One of the benefits of JavaScript is its versatility. In addition to web development, it's also used for mobile development, game development, and data visualization. It has a large and active community of developers, and there are many libraries and frameworks, such as React and Angular, that can make development faster and more efficient.",[12,1939,1940],{},"JavaScript is also in high demand in the job market. According to the 2020 Stack Overflow Developer Survey, it's the most popular programming language, and it's used in a wide range of industries, including finance, e-commerce, and media.",[16,1942,1944],{"id":1943},"java","Java",[12,1946,1947],{},"Java is a popular, high-level programming language used for building a variety of applications, including web, mobile, and desktop applications. It's known for its portability, as the same Java code can run on any device that supports the Java Virtual Machine (JVM).",[12,1949,1950],{},"Java has a large and active community of developers, and it's used in a variety of industries, including finance, healthcare, and retail. It's also a popular choice for Android mobile development, as it's the primary language supported by Android Studio, the official Android development environment.",[12,1952,1953],{},"In terms of job demand, Java is a solid choice. According to the 2020 Stack Overflow Developer Survey, it's the second most popular programming language, and it's used in a wide range of industries.",[16,1955,1957],{"id":1956},"c","C++",[12,1959,1960],{},"C++ is a high-performance programming language used for building a variety of applications, including system software, games, and mobile apps. It's known for its efficiency and speed, and it's often used in resource-intensive applications where performance is critical.",[12,1962,1963],{},"C++ is a more advanced language and may be more difficult for beginners to learn. However, it's a good choice for those who are interested in low-level programming and want to learn more about how computers work under the hood.",[12,1965,1966],{},"In terms of job demand, C++ is a popular choice in industries such as gaming, finance, and aerospace. It's also used in the development of many popular software programs, such as Photoshop and Chrome.",[16,1968,1970],{"id":1969},"swift","Swift",[12,1972,1973],{},"Swift is a modern, high-level programming language used for building iOS and macOS applications. It was developed by Apple and is designed to be easy to read and write, while also providing powerful capabilities.",[12,1975,1976],{},"One of the benefits of Swift is its focus on safety. It has built-in error checking and prevents common programming mistakes, which can save time and reduce the risk of bugs in your code. Swift is also known for its performance, as it's able to run code faster than many other high-level languages.",[12,1978,1979],{},"In terms of job demand, Swift is a good choice for those interested in mobile development, as it's the primary language used for building iOS and macOS applications. It's also used in industries such as education, healthcare, and finance.",[12,1981,1982],{},"While Swift is a relatively new language, it's gained popularity quickly and has a large and active community of developers. It's also constantly being updated and improved, making it a good choice for those who want to stay up-to-date with the latest developments in the field.",[16,1984,1985],{"id":339},"Go",[12,1987,1988],{},"Go (also known as Golang) is a programming language developed by Google. It's a statically-typed language that's known for its simplicity, concurrency, and performance.",[12,1990,1991],{},"One of the benefits of Go is its simplicity. It has a small, easy-to-learn syntax and a standard library that provides many common programming tasks, making it a good choice for beginners. Go is also designed to be concurrent, meaning it can handle multiple tasks at the same time, which can make it faster and more efficient for certain types of applications.",[12,1993,1994],{},"In terms of job demand, Go is a popular choice for building server-side applications and microservices, and it's used in industries such as finance, healthcare, and technology. It has a growing community of developers and is constantly being updated and improved.",[16,1996,1998],{"id":1997},"rust","Rust",[12,2000,2001],{},"Rust is a programming language designed for performance and safety. It's a statically-typed language that's known for its speed, reliability, and concurrency.",[12,2003,2004],{},"One of the benefits of Rust is its focus on safety. It has a strict type system and includes features such as borrow checking and ownership, which help prevent common programming errors and reduce the risk of bugs in your code. Rust is also designed to be concurrent, meaning it can handle multiple tasks at the same time, which can make it faster and more efficient for certain types of applications.",[12,2006,2007],{},"In terms of job demand, Rust is a popular choice for building low-level systems, such as operating systems and web browsers, and it's used in industries such as finance, healthcare, and technology. It has a growing community of developers and is constantly being updated and improved.",[16,2009,2011],{"id":2010},"clojure","Clojure",[12,2013,2014],{},"Clojure is a functional programming language that runs on the Java Virtual Machine (JVM). It's known for its simplicity, concurrency, and flexibility.",[12,2016,2017],{},"One of the benefits of Clojure is its focus on simplicity. It has a small, easy-to-learn syntax and a standard library that provides many common programming tasks, making it a good choice for beginners. Clojure is also designed to be concurrent, meaning it can handle multiple tasks at the same time, which can make it faster and more efficient for certain types of applications.",[12,2019,2020],{},"In terms of job demand, Clojure is a popular choice for building server-side applications and is used in industries such as finance, healthcare, and technology. It has a growing community of developers and is constantly being updated and improved.",[16,2022,2024],{"id":2023},"ruby","Ruby",[12,2026,2027],{},"Ruby is a high-level, dynamically-typed programming language known for its simplicity and flexibility. It's often used for web development, scripting, and data analysis, and it has a large and active community of developers.",[12,2029,2030],{},"One of the benefits of Ruby is its readability. Its syntax is straightforward and easy to understand, making it a great choice for beginners. Ruby also has a wide range of libraries and frameworks, such as Rails and Sinatra, which make it easy to build web applications and perform data analysis.",[12,2032,2033],{},"In terms of job demand, Ruby is a popular choice for web development and is frequently used in industries such as finance, healthcare, and technology. It's also a good choice for those interested in building web applications quickly, as the Rails framework makes it easy to build and deploy applications.",[12,2035,2036],{},"Ruby is known for its friendly and welcoming community, and it has a large number of resources and tutorials available for those learning the language. It's also constantly being updated and improved, making it a good choice for those who want to stay up-to-date with the latest developments in the field.",[12,2038,2039],{},"Overall, Ruby is a good choice for those interested in web development and looking for a language that's easy to read and write. With its wide range of libraries and frameworks, it's a powerful tool for building web applications and performing data analysis.",[16,2041,301],{"id":300},[12,2043,2044],{},"There are many programming languages to choose from, and it can be difficult to decide which one to learn first. Ultimately, the best programming language for you will depend on your goals and interests.",[12,2046,2047],{},"If you're just starting out and want to learn a language that's easy to read and write, Python or JavaScript might be good choices. If you're interested in mobile development, Swift or Java might be more suitable. And if you're interested in low-level programming and performance, C++ could be a good option.",[12,2049,2050],{},"No matter which language you choose, it's important to be consistent and dedicated to your learning. With hard work and persistence, you can master any programming language and achieve your goals as a developer.",{"title":24,"searchDepth":25,"depth":25,"links":2052},[2053,2054,2055,2056,2057,2058,2059,2060,2061,2062],{"id":1917,"depth":28,"text":1918},{"id":1930,"depth":28,"text":1931},{"id":1943,"depth":28,"text":1944},{"id":1956,"depth":28,"text":1957},{"id":1969,"depth":28,"text":1970},{"id":339,"depth":28,"text":1985},{"id":1997,"depth":28,"text":1998},{"id":2010,"depth":28,"text":2011},{"id":2023,"depth":28,"text":2024},{"id":300,"depth":28,"text":301},"https://images.unsplash.com/photo-1546410531-bb4caa6b424d?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDE4fHxwcm9ncmFtbWluZyUyMGxhbmd1YWdlfGVufDB8fHx8MTY3MTE1NDE5OQ&ixlib=rb-4.0.3&q=80&w=2000",{"slug":2065,"excerpt":2066},"best-programming-language-to-learn-in-2023",{"type":9,"value":2067},[2068,2070],[12,2069,1911],{},[12,2071,1914],{},"/best-programming-language-to-learn-in-2023","2022-12-19T09:42:26.000Z",8,{"title":1906,"description":1911},[1917,1930,2077,1969,2023,1997,339,340,341,2078,2079,342],"c++","web-development","career",null,"W8A14yKKWF5htIFvN1GmkvOJcpOCf6OsgJIaYAQTbrQ",{"id":2083,"title":2084,"author":7,"body":2085,"category":29,"description":30,"extension":31,"image":2097,"isDraft":33,"isFeatured":34,"locale":35,"meta":2098,"navigation":33,"path":2103,"publishedAt":2104,"readingTime":2105,"seo":2106,"stem":2107,"tags":2108,"updatedAt":2104,"__hash__":2111},"articles_en/building-a-sustainable-and-profitable-business-model.md","Building a Sustainable and Profitable Business Model",{"type":9,"value":2086,"toc":2094},[2087,2090,2092],[12,2088,2089],{},"A sustainable business model is the foundation for long-term startup success.",[16,2091,19],{"id":18},[12,2093,22],{},{"title":24,"searchDepth":25,"depth":25,"links":2095},[2096],{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1553729459-efe14ef6055d?q=80&w=1200&auto=format&fit=crop",{"excerpt":2099},{"type":9,"value":2100},[2101],[12,2102,2089],{},"/building-a-sustainable-and-profitable-business-model","2025-06-10",17,{"title":2084,"description":30},"building-a-sustainable-and-profitable-business-model",[29,47,2109,2110],"business-model","strategy","LfNrTCB4az_xhAoQ8wv-ibnYuahQxRhqMQnRSU4Fht0",{"id":2113,"title":2114,"author":7,"body":2115,"category":2127,"description":74,"extension":31,"image":2128,"isDraft":33,"isFeatured":34,"locale":35,"meta":2129,"navigation":33,"path":2134,"publishedAt":2135,"readingTime":1432,"seo":2136,"stem":2137,"tags":2138,"updatedAt":2135,"__hash__":2140},"articles_en/building-internal-product-evaluation-systems.md","Building Internal Product Evaluation Systems",{"type":9,"value":2116,"toc":2124},[2117,2120,2122],[12,2118,2119],{},"Internal product evaluation systems help make data-driven decisions.",[16,2121,19],{"id":18},[12,2123,22],{},{"title":24,"searchDepth":25,"depth":25,"links":2125},[2126],{"id":18,"depth":28,"text":19},"product-management","https://images.unsplash.com/photo-1460925895917-afdab827c52f?q=80&w=1200&auto=format&fit=crop",{"excerpt":2130},{"type":9,"value":2131},[2132],[12,2133,2119],{},"/building-internal-product-evaluation-systems","2025-02-18",{"title":2114,"description":74},"building-internal-product-evaluation-systems",[73,2127,2139],"evaluation","Q_M6AnIYehxsNxNPtMLFxEyQudkATSR_xzWtlJnXuCc",{"id":2142,"title":2143,"author":7,"body":2144,"category":373,"description":6677,"extension":31,"image":6678,"isDraft":34,"isFeatured":33,"locale":35,"meta":6679,"navigation":33,"path":6684,"publishedAt":1838,"readingTime":2510,"seo":6685,"stem":6686,"tags":6687,"updatedAt":1838,"__hash__":6694},"articles_en/building-multilingual-blogs-nuxt-content.md","Building a Production-Ready Multilingual Blog with Nuxt Content & i18n",{"type":9,"value":2145,"toc":6645},[2146,2149,2153,2156,2182,2186,2189,2206,2210,2213,2257,2260,2290,2294,2301,2659,2663,2666,2674,2681,2766,2772,2846,2850,2857,3490,3494,3499,4222,4226,4232,4792,4796,4801,5107,5111,5114,5119,5407,5410,5528,5532,5538,5785,5789,5794,5892,5898,5976,5981,6076,6080,6084,6087,6101,6105,6108,6127,6131,6137,6212,6216,6219,6240,6244,6247,6341,6345,6349,6355,6395,6399,6410,6429,6433,6444,6483,6487,6491,6497,6553,6557,6560,6564,6571,6610,6612,6615,6632,6635,6638,6641],[12,2147,2148],{},"This tutorial will guide you through building a complete multilingual blog system using Nuxt 3, Nuxt Content, and Nuxt i18n. You're actually reading this on a blog built with this exact stack! I'll share the real implementation details, code snippets, and best practices I used.",[16,2150,2152],{"id":2151},"why-build-a-multilingual-blog","Why Build a Multilingual Blog?",[12,2154,2155],{},"Before diving into the technical implementation, let's understand the benefits:",[190,2157,2158,2164,2170,2176],{},[193,2159,2160,2163],{},[397,2161,2162],{},"Wider Reach",": Access global audiences in their native languages",[193,2165,2166,2169],{},[397,2167,2168],{},"Better SEO",": Rank in search results across different language regions",[193,2171,2172,2175],{},[397,2173,2174],{},"Improved UX",": Users engage more with content in their preferred language",[193,2177,2178,2181],{},[397,2179,2180],{},"Professional Image",": Shows commitment to serving diverse audiences",[16,2183,2185],{"id":2184},"project-overview","Project Overview",[12,2187,2188],{},"This blog supports both English and Arabic (with RTL support), featuring:",[190,2190,2191,2194,2197,2200,2203],{},[193,2192,2193],{},"Locale-based content organization",[193,2195,2196],{},"Dynamic category and author localization",[193,2198,2199],{},"SEO optimization with hreflang tags",[193,2201,2202],{},"Language switcher",[193,2204,2205],{},"Responsive design with RTL/LTR support",[16,2207,2209],{"id":2208},"step-1-project-setup","Step 1: Project Setup",[12,2211,2212],{},"First, create a new Nuxt 3 project:",[2214,2215,2219],"pre",{"className":2216,"code":2217,"language":2218,"meta":24,"style":24},"language-bash shiki shiki-themes github-light dark-plus dark-plus","npx nuxi@latest init my-multilingual-blog\ncd my-multilingual-blog\nnpm install\n","bash",[2220,2221,2222,2241,2249],"code",{"__ignoreMap":24},[2223,2224,2227,2231,2235,2238],"span",{"class":2225,"line":2226},"line",1,[2223,2228,2230],{"class":2229},"svuFb","npx",[2223,2232,2234],{"class":2233},"sGDl4"," nuxi@latest",[2223,2236,2237],{"class":2233}," init",[2223,2239,2240],{"class":2233}," my-multilingual-blog\n",[2223,2242,2243,2247],{"class":2225,"line":28},[2223,2244,2246],{"class":2245},"sNX3-","cd",[2223,2248,2240],{"class":2233},[2223,2250,2251,2254],{"class":2225,"line":25},[2223,2252,2253],{"class":2229},"npm",[2223,2255,2256],{"class":2233}," install\n",[12,2258,2259],{},"Install required dependencies:",[2214,2261,2263],{"className":2216,"code":2262,"language":2218,"meta":24,"style":24},"npm install @nuxt/content @nuxtjs/i18n @nuxtjs/tailwindcss\nnpm install dayjs\n",[2220,2264,2265,2281],{"__ignoreMap":24},[2223,2266,2267,2269,2272,2275,2278],{"class":2225,"line":2226},[2223,2268,2253],{"class":2229},[2223,2270,2271],{"class":2233}," install",[2223,2273,2274],{"class":2233}," @nuxt/content",[2223,2276,2277],{"class":2233}," @nuxtjs/i18n",[2223,2279,2280],{"class":2233}," @nuxtjs/tailwindcss\n",[2223,2282,2283,2285,2287],{"class":2225,"line":28},[2223,2284,2253],{"class":2229},[2223,2286,2271],{"class":2233},[2223,2288,2289],{"class":2233}," dayjs\n",[16,2291,2293],{"id":2292},"step-2-configure-nuxt-modules","Step 2: Configure Nuxt Modules",[12,2295,2296,2297,2300],{},"Update your ",[2220,2298,2299],{},"nuxt.config.ts",":",[2214,2302,2306],{"className":2303,"code":2304,"language":2305,"meta":24,"style":24},"language-typescript shiki shiki-themes github-light dark-plus dark-plus","// nuxt.config.ts\nexport default defineNuxtConfig({\n  modules: [\n    \"@nuxt/content\",\n    \"@nuxtjs/i18n\",\n    \"@nuxtjs/tailwindcss\"\n  ],\n  \n  i18n: {\n    locales: [\n      {\n        code: \"en\",\n        iso: \"en-US\",\n        name: \"English\",\n        file: \"en.json\",\n        dir: \"ltr\"\n      },\n      {\n        code: \"ar\",\n        iso: \"ar-SA\",\n        name: \"العربية\",\n        file: \"ar.json\",\n        dir: \"rtl\" // Important for Arabic\n      }\n    ],\n    defaultLocale: \"en\",\n    strategy: \"prefix_except_default\", // URLs: /blog, /ar/blog\n    lazy: true,\n    langDir: \"i18n/locales/\",\n    detectBrowserLanguage: {\n      useCookie: true,\n      cookieKey: \"i18n_redirected\",\n      redirectOn: \"root\"\n    }\n  },\n\n  content: {\n    highlight: {\n      theme: \"github-dark\"\n    }\n  }\n});\n","typescript",[2220,2307,2308,2314,2330,2339,2348,2355,2361,2367,2372,2380,2388,2393,2403,2413,2423,2434,2442,2447,2452,2462,2471,2481,2491,2502,2508,2514,2524,2538,2550,2561,2569,2579,2590,2599,2605,2611,2617,2625,2633,2642,2647,2653],{"__ignoreMap":24},[2223,2309,2310],{"class":2225,"line":2226},[2223,2311,2313],{"class":2312},"s56mj","// nuxt.config.ts\n",[2223,2315,2316,2320,2323,2326],{"class":2225,"line":28},[2223,2317,2319],{"class":2318},"sEkCa","export",[2223,2321,2322],{"class":2318}," default",[2223,2324,2325],{"class":2229}," defineNuxtConfig",[2223,2327,2329],{"class":2328},"sG4b4","({\n",[2223,2331,2332,2336],{"class":2225,"line":25},[2223,2333,2335],{"class":2334},"sZiGn","  modules:",[2223,2337,2338],{"class":2328}," [\n",[2223,2340,2342,2345],{"class":2225,"line":2341},4,[2223,2343,2344],{"class":2233},"    \"@nuxt/content\"",[2223,2346,2347],{"class":2328},",\n",[2223,2349,2350,2353],{"class":2225,"line":336},[2223,2351,2352],{"class":2233},"    \"@nuxtjs/i18n\"",[2223,2354,2347],{"class":2328},[2223,2356,2358],{"class":2225,"line":2357},6,[2223,2359,2360],{"class":2233},"    \"@nuxtjs/tailwindcss\"\n",[2223,2362,2364],{"class":2225,"line":2363},7,[2223,2365,2366],{"class":2328},"  ],\n",[2223,2368,2369],{"class":2225,"line":2074},[2223,2370,2371],{"class":2328},"  \n",[2223,2373,2374,2377],{"class":2225,"line":43},[2223,2375,2376],{"class":2334},"  i18n:",[2223,2378,2379],{"class":2328}," {\n",[2223,2381,2383,2386],{"class":2225,"line":2382},10,[2223,2384,2385],{"class":2334},"    locales:",[2223,2387,2338],{"class":2328},[2223,2389,2390],{"class":2225,"line":1784},[2223,2391,2392],{"class":2328},"      {\n",[2223,2394,2395,2398,2401],{"class":2225,"line":82},[2223,2396,2397],{"class":2334},"        code:",[2223,2399,2400],{"class":2233}," \"en\"",[2223,2402,2347],{"class":2328},[2223,2404,2405,2408,2411],{"class":2225,"line":1432},[2223,2406,2407],{"class":2334},"        iso:",[2223,2409,2410],{"class":2233}," \"en-US\"",[2223,2412,2347],{"class":2328},[2223,2414,2415,2418,2421],{"class":2225,"line":369},[2223,2416,2417],{"class":2334},"        name:",[2223,2419,2420],{"class":2233}," \"English\"",[2223,2422,2347],{"class":2328},[2223,2424,2426,2429,2432],{"class":2225,"line":2425},15,[2223,2427,2428],{"class":2334},"        file:",[2223,2430,2431],{"class":2233}," \"en.json\"",[2223,2433,2347],{"class":2328},[2223,2435,2436,2439],{"class":2225,"line":1750},[2223,2437,2438],{"class":2334},"        dir:",[2223,2440,2441],{"class":2233}," \"ltr\"\n",[2223,2443,2444],{"class":2225,"line":2105},[2223,2445,2446],{"class":2328},"      },\n",[2223,2448,2450],{"class":2225,"line":2449},18,[2223,2451,2392],{"class":2328},[2223,2453,2455,2457,2460],{"class":2225,"line":2454},19,[2223,2456,2397],{"class":2334},[2223,2458,2459],{"class":2233}," \"ar\"",[2223,2461,2347],{"class":2328},[2223,2463,2464,2466,2469],{"class":2225,"line":1839},[2223,2465,2407],{"class":2334},[2223,2467,2468],{"class":2233}," \"ar-SA\"",[2223,2470,2347],{"class":2328},[2223,2472,2474,2476,2479],{"class":2225,"line":2473},21,[2223,2475,2417],{"class":2334},[2223,2477,2478],{"class":2233}," \"العربية\"",[2223,2480,2347],{"class":2328},[2223,2482,2484,2486,2489],{"class":2225,"line":2483},22,[2223,2485,2428],{"class":2334},[2223,2487,2488],{"class":2233}," \"ar.json\"",[2223,2490,2347],{"class":2328},[2223,2492,2494,2496,2499],{"class":2225,"line":2493},23,[2223,2495,2438],{"class":2334},[2223,2497,2498],{"class":2233}," \"rtl\"",[2223,2500,2501],{"class":2312}," // Important for Arabic\n",[2223,2503,2505],{"class":2225,"line":2504},24,[2223,2506,2507],{"class":2328},"      }\n",[2223,2509,2511],{"class":2225,"line":2510},25,[2223,2512,2513],{"class":2328},"    ],\n",[2223,2515,2517,2520,2522],{"class":2225,"line":2516},26,[2223,2518,2519],{"class":2334},"    defaultLocale:",[2223,2521,2400],{"class":2233},[2223,2523,2347],{"class":2328},[2223,2525,2527,2530,2533,2535],{"class":2225,"line":2526},27,[2223,2528,2529],{"class":2334},"    strategy:",[2223,2531,2532],{"class":2233}," \"prefix_except_default\"",[2223,2534,269],{"class":2328},[2223,2536,2537],{"class":2312},"// URLs: /blog, /ar/blog\n",[2223,2539,2541,2544,2548],{"class":2225,"line":2540},28,[2223,2542,2543],{"class":2334},"    lazy:",[2223,2545,2547],{"class":2546},"s7v1m"," true",[2223,2549,2347],{"class":2328},[2223,2551,2553,2556,2559],{"class":2225,"line":2552},29,[2223,2554,2555],{"class":2334},"    langDir:",[2223,2557,2558],{"class":2233}," \"i18n/locales/\"",[2223,2560,2347],{"class":2328},[2223,2562,2564,2567],{"class":2225,"line":2563},30,[2223,2565,2566],{"class":2334},"    detectBrowserLanguage:",[2223,2568,2379],{"class":2328},[2223,2570,2572,2575,2577],{"class":2225,"line":2571},31,[2223,2573,2574],{"class":2334},"      useCookie:",[2223,2576,2547],{"class":2546},[2223,2578,2347],{"class":2328},[2223,2580,2582,2585,2588],{"class":2225,"line":2581},32,[2223,2583,2584],{"class":2334},"      cookieKey:",[2223,2586,2587],{"class":2233}," \"i18n_redirected\"",[2223,2589,2347],{"class":2328},[2223,2591,2593,2596],{"class":2225,"line":2592},33,[2223,2594,2595],{"class":2334},"      redirectOn:",[2223,2597,2598],{"class":2233}," \"root\"\n",[2223,2600,2602],{"class":2225,"line":2601},34,[2223,2603,2604],{"class":2328},"    }\n",[2223,2606,2608],{"class":2225,"line":2607},35,[2223,2609,2610],{"class":2328},"  },\n",[2223,2612,2614],{"class":2225,"line":2613},36,[2223,2615,2616],{"emptyLinePlaceholder":33},"\n",[2223,2618,2620,2623],{"class":2225,"line":2619},37,[2223,2621,2622],{"class":2334},"  content:",[2223,2624,2379],{"class":2328},[2223,2626,2628,2631],{"class":2225,"line":2627},38,[2223,2629,2630],{"class":2334},"    highlight:",[2223,2632,2379],{"class":2328},[2223,2634,2636,2639],{"class":2225,"line":2635},39,[2223,2637,2638],{"class":2334},"      theme:",[2223,2640,2641],{"class":2233}," \"github-dark\"\n",[2223,2643,2645],{"class":2225,"line":2644},40,[2223,2646,2604],{"class":2328},[2223,2648,2650],{"class":2225,"line":2649},41,[2223,2651,2652],{"class":2328},"  }\n",[2223,2654,2656],{"class":2225,"line":2655},42,[2223,2657,2658],{"class":2328},"});\n",[16,2660,2662],{"id":2661},"step-3-create-content-structure","Step 3: Create Content Structure",[12,2664,2665],{},"Organize your content by locale:",[2214,2667,2672],{"className":2668,"code":2670,"language":2671},[2669],"language-text","content/\n├── en/\n│   ├── articles/\n│   │   ├── my-first-post.md\n│   │   └── another-post.md\n│   ├── authors/\n│   │   └── raed-bahri.md\n│   └── categories/\n│       └── development.md\n├── ar/\n│   ├── articles/\n│   │   ├── my-first-post.md\n│   │   └── another-post.md\n│   ├── authors/\n│   │   └── رائد-البحري.md\n│   └── categories/\n│       └── التطوير.md\n","text",[2220,2673,2670],{"__ignoreMap":24},[12,2675,2676,2677,2680],{},"Example English article (",[2220,2678,2679],{},"content/en/articles/my-first-post.md","):",[2214,2682,2686],{"className":2683,"code":2684,"language":2685,"meta":24,"style":24},"language-markdown shiki shiki-themes github-light dark-plus dark-plus","---\ntitle: \"My First Blog Post\"\ndescription: \"Introduction to my multilingual blog\"\npublishedAt: \"2025-01-10\"\nauthor: \"raed-bahri\"\ncategory: \"development\"\ntags:\n  - nuxt\n  - tutorial\nimage: \"/images/blog/post-1.jpg\"\nisFeatured: true\nreadingTime: 5\nlocale: \"en\"\n---\n\nYour content here...\n","markdown",[2220,2687,2688,2693,2698,2703,2708,2713,2718,2723,2728,2733,2738,2743,2748,2753,2757,2761],{"__ignoreMap":24},[2223,2689,2690],{"class":2225,"line":2226},[2223,2691,2692],{},"---\n",[2223,2694,2695],{"class":2225,"line":28},[2223,2696,2697],{},"title: \"My First Blog Post\"\n",[2223,2699,2700],{"class":2225,"line":25},[2223,2701,2702],{},"description: \"Introduction to my multilingual blog\"\n",[2223,2704,2705],{"class":2225,"line":2341},[2223,2706,2707],{},"publishedAt: \"2025-01-10\"\n",[2223,2709,2710],{"class":2225,"line":336},[2223,2711,2712],{},"author: \"raed-bahri\"\n",[2223,2714,2715],{"class":2225,"line":2357},[2223,2716,2717],{},"category: \"development\"\n",[2223,2719,2720],{"class":2225,"line":2363},[2223,2721,2722],{},"tags:\n",[2223,2724,2725],{"class":2225,"line":2074},[2223,2726,2727],{},"  - nuxt\n",[2223,2729,2730],{"class":2225,"line":43},[2223,2731,2732],{},"  - tutorial\n",[2223,2734,2735],{"class":2225,"line":2382},[2223,2736,2737],{},"image: \"/images/blog/post-1.jpg\"\n",[2223,2739,2740],{"class":2225,"line":1784},[2223,2741,2742],{},"isFeatured: true\n",[2223,2744,2745],{"class":2225,"line":82},[2223,2746,2747],{},"readingTime: 5\n",[2223,2749,2750],{"class":2225,"line":1432},[2223,2751,2752],{},"locale: \"en\"\n",[2223,2754,2755],{"class":2225,"line":369},[2223,2756,2692],{},[2223,2758,2759],{"class":2225,"line":2425},[2223,2760,2616],{"emptyLinePlaceholder":33},[2223,2762,2763],{"class":2225,"line":1750},[2223,2764,2765],{},"Your content here...\n",[12,2767,2768,2769,2680],{},"Example Arabic article (",[2220,2770,2771],{},"content/ar/articles/my-first-post.md",[2214,2773,2775],{"className":2683,"code":2774,"language":2685,"meta":24,"style":24},"---\ntitle: \"مقالتي الأولى\"\ndescription: \"مقدمة إلى مدونتي متعددة اللغات\"\npublishedAt: \"2025-01-10\"\nauthor: \"raed-bahri\"\ncategory: \"development\"\ntags:\n  - nuxt\n  - تعليم\nimage: \"/images/blog/post-1.jpg\"\nisFeatured: true\nreadingTime: 5\nlocale: \"ar\"\n---\n\nالمحتوى هنا...\n",[2220,2776,2777,2781,2786,2791,2795,2799,2803,2807,2811,2816,2820,2824,2828,2833,2837,2841],{"__ignoreMap":24},[2223,2778,2779],{"class":2225,"line":2226},[2223,2780,2692],{},[2223,2782,2783],{"class":2225,"line":28},[2223,2784,2785],{},"title: \"مقالتي الأولى\"\n",[2223,2787,2788],{"class":2225,"line":25},[2223,2789,2790],{},"description: \"مقدمة إلى مدونتي متعددة اللغات\"\n",[2223,2792,2793],{"class":2225,"line":2341},[2223,2794,2707],{},[2223,2796,2797],{"class":2225,"line":336},[2223,2798,2712],{},[2223,2800,2801],{"class":2225,"line":2357},[2223,2802,2717],{},[2223,2804,2805],{"class":2225,"line":2363},[2223,2806,2722],{},[2223,2808,2809],{"class":2225,"line":2074},[2223,2810,2727],{},[2223,2812,2813],{"class":2225,"line":43},[2223,2814,2815],{},"  - تعليم\n",[2223,2817,2818],{"class":2225,"line":2382},[2223,2819,2737],{},[2223,2821,2822],{"class":2225,"line":1784},[2223,2823,2742],{},[2223,2825,2826],{"class":2225,"line":82},[2223,2827,2747],{},[2223,2829,2830],{"class":2225,"line":1432},[2223,2831,2832],{},"locale: \"ar\"\n",[2223,2834,2835],{"class":2225,"line":369},[2223,2836,2692],{},[2223,2838,2839],{"class":2225,"line":2425},[2223,2840,2616],{"emptyLinePlaceholder":33},[2223,2842,2843],{"class":2225,"line":1750},[2223,2844,2845],{},"المحتوى هنا...\n",[16,2847,2849],{"id":2848},"step-4-create-type-definitions","Step 4: Create Type Definitions",[12,2851,2852,2853,2856],{},"Create ",[2220,2854,2855],{},"types/content.ts"," for TypeScript support:",[2214,2858,2860],{"className":2303,"code":2859,"language":2305,"meta":24,"style":24},"// types/content.ts\nimport { z } from \"zod\";\n\nexport const ArticleSchema = z.object({\n  title: z.string(),\n  description: z.string(),\n  publishedAt: z.string(),\n  author: z.string(),\n  category: z.string(),\n  tags: z.array(z.string()).optional(),\n  image: z.string().optional(),\n  isFeatured: z.boolean().optional(),\n  readingTime: z.number().optional(),\n  locale: z.string(),\n});\n\nexport type Article = z.infer\u003Ctypeof ArticleSchema> & {\n  path: string;\n  _path: string;\n};\n\nexport type Category = {\n  title: string;\n  description: string;\n  slug: string;\n  image?: string;\n  locale: string;\n  _path: string;\n};\n\nexport type Author = {\n  name: string;\n  slug: string;\n  bio: string;\n  avatar: string;\n  locale: string;\n};\n\n// Helper functions to get collections\nexport const getArticlesCollection = (locale: string) => {\n  return `${locale}/articles`;\n};\n\nexport const getCategoriesCollection = (locale: string) => {\n  return `${locale}/categories`;\n};\n\nexport const getAuthorsCollection = (locale: string) => {\n  return `${locale}/authors`;\n};\n",[2220,2861,2862,2867,2890,2894,2920,2935,2948,2961,2974,2987,3016,3034,3052,3070,3083,3087,3091,3127,3141,3152,3157,3161,3174,3185,3196,3207,3219,3230,3240,3244,3248,3261,3272,3282,3293,3304,3314,3318,3322,3327,3356,3378,3382,3387,3413,3431,3436,3441,3467,3485],{"__ignoreMap":24},[2223,2863,2864],{"class":2225,"line":2226},[2223,2865,2866],{"class":2312},"// types/content.ts\n",[2223,2868,2869,2872,2875,2878,2881,2884,2887],{"class":2225,"line":28},[2223,2870,2871],{"class":2318},"import",[2223,2873,2874],{"class":2328}," { ",[2223,2876,2877],{"class":2334},"z",[2223,2879,2880],{"class":2328}," } ",[2223,2882,2883],{"class":2318},"from",[2223,2885,2886],{"class":2233}," \"zod\"",[2223,2888,2889],{"class":2328},";\n",[2223,2891,2892],{"class":2225,"line":25},[2223,2893,2616],{"emptyLinePlaceholder":33},[2223,2895,2896,2898,2902,2906,2910,2913,2915,2918],{"class":2225,"line":2341},[2223,2897,2319],{"class":2318},[2223,2899,2901],{"class":2900},"s5uUr"," const",[2223,2903,2905],{"class":2904},"sToQf"," ArticleSchema",[2223,2907,2909],{"class":2908},"s1p9p"," =",[2223,2911,2912],{"class":2334}," z",[2223,2914,260],{"class":2328},[2223,2916,2917],{"class":2229},"object",[2223,2919,2329],{"class":2328},[2223,2921,2922,2925,2927,2929,2932],{"class":2225,"line":336},[2223,2923,2924],{"class":2334},"  title:",[2223,2926,2912],{"class":2334},[2223,2928,260],{"class":2328},[2223,2930,2931],{"class":2229},"string",[2223,2933,2934],{"class":2328},"(),\n",[2223,2936,2937,2940,2942,2944,2946],{"class":2225,"line":2357},[2223,2938,2939],{"class":2334},"  description:",[2223,2941,2912],{"class":2334},[2223,2943,260],{"class":2328},[2223,2945,2931],{"class":2229},[2223,2947,2934],{"class":2328},[2223,2949,2950,2953,2955,2957,2959],{"class":2225,"line":2363},[2223,2951,2952],{"class":2334},"  publishedAt:",[2223,2954,2912],{"class":2334},[2223,2956,260],{"class":2328},[2223,2958,2931],{"class":2229},[2223,2960,2934],{"class":2328},[2223,2962,2963,2966,2968,2970,2972],{"class":2225,"line":2074},[2223,2964,2965],{"class":2334},"  author:",[2223,2967,2912],{"class":2334},[2223,2969,260],{"class":2328},[2223,2971,2931],{"class":2229},[2223,2973,2934],{"class":2328},[2223,2975,2976,2979,2981,2983,2985],{"class":2225,"line":43},[2223,2977,2978],{"class":2334},"  category:",[2223,2980,2912],{"class":2334},[2223,2982,260],{"class":2328},[2223,2984,2931],{"class":2229},[2223,2986,2934],{"class":2328},[2223,2988,2989,2992,2994,2996,2999,3002,3004,3006,3008,3011,3014],{"class":2225,"line":2382},[2223,2990,2991],{"class":2334},"  tags:",[2223,2993,2912],{"class":2334},[2223,2995,260],{"class":2328},[2223,2997,2998],{"class":2229},"array",[2223,3000,3001],{"class":2328},"(",[2223,3003,2877],{"class":2334},[2223,3005,260],{"class":2328},[2223,3007,2931],{"class":2229},[2223,3009,3010],{"class":2328},"()).",[2223,3012,3013],{"class":2229},"optional",[2223,3015,2934],{"class":2328},[2223,3017,3018,3021,3023,3025,3027,3030,3032],{"class":2225,"line":1784},[2223,3019,3020],{"class":2334},"  image:",[2223,3022,2912],{"class":2334},[2223,3024,260],{"class":2328},[2223,3026,2931],{"class":2229},[2223,3028,3029],{"class":2328},"().",[2223,3031,3013],{"class":2229},[2223,3033,2934],{"class":2328},[2223,3035,3036,3039,3041,3043,3046,3048,3050],{"class":2225,"line":82},[2223,3037,3038],{"class":2334},"  isFeatured:",[2223,3040,2912],{"class":2334},[2223,3042,260],{"class":2328},[2223,3044,3045],{"class":2229},"boolean",[2223,3047,3029],{"class":2328},[2223,3049,3013],{"class":2229},[2223,3051,2934],{"class":2328},[2223,3053,3054,3057,3059,3061,3064,3066,3068],{"class":2225,"line":1432},[2223,3055,3056],{"class":2334},"  readingTime:",[2223,3058,2912],{"class":2334},[2223,3060,260],{"class":2328},[2223,3062,3063],{"class":2229},"number",[2223,3065,3029],{"class":2328},[2223,3067,3013],{"class":2229},[2223,3069,2934],{"class":2328},[2223,3071,3072,3075,3077,3079,3081],{"class":2225,"line":369},[2223,3073,3074],{"class":2334},"  locale:",[2223,3076,2912],{"class":2334},[2223,3078,260],{"class":2328},[2223,3080,2931],{"class":2229},[2223,3082,2934],{"class":2328},[2223,3084,3085],{"class":2225,"line":2425},[2223,3086,2658],{"class":2328},[2223,3088,3089],{"class":2225,"line":1750},[2223,3090,2616],{"emptyLinePlaceholder":33},[2223,3092,3093,3095,3098,3102,3104,3106,3108,3111,3114,3117,3119,3122,3125],{"class":2225,"line":2105},[2223,3094,2319],{"class":2318},[2223,3096,3097],{"class":2900}," type",[2223,3099,3101],{"class":3100},"su_XB"," Article",[2223,3103,2909],{"class":2908},[2223,3105,2912],{"class":3100},[2223,3107,260],{"class":2328},[2223,3109,3110],{"class":3100},"infer",[2223,3112,3113],{"class":2328},"\u003C",[2223,3115,3116],{"class":2900},"typeof",[2223,3118,2905],{"class":2334},[2223,3120,3121],{"class":2328},"> ",[2223,3123,3124],{"class":2908},"&",[2223,3126,2379],{"class":2328},[2223,3128,3129,3133,3135,3139],{"class":2225,"line":2449},[2223,3130,3132],{"class":3131},"s9TRk","  path",[2223,3134,2300],{"class":2908},[2223,3136,3138],{"class":3137},"s6-XD"," string",[2223,3140,2889],{"class":2328},[2223,3142,3143,3146,3148,3150],{"class":2225,"line":2454},[2223,3144,3145],{"class":3131},"  _path",[2223,3147,2300],{"class":2908},[2223,3149,3138],{"class":3137},[2223,3151,2889],{"class":2328},[2223,3153,3154],{"class":2225,"line":1839},[2223,3155,3156],{"class":2328},"};\n",[2223,3158,3159],{"class":2225,"line":2473},[2223,3160,2616],{"emptyLinePlaceholder":33},[2223,3162,3163,3165,3167,3170,3172],{"class":2225,"line":2483},[2223,3164,2319],{"class":2318},[2223,3166,3097],{"class":2900},[2223,3168,3169],{"class":3100}," Category",[2223,3171,2909],{"class":2908},[2223,3173,2379],{"class":2328},[2223,3175,3176,3179,3181,3183],{"class":2225,"line":2493},[2223,3177,3178],{"class":3131},"  title",[2223,3180,2300],{"class":2908},[2223,3182,3138],{"class":3137},[2223,3184,2889],{"class":2328},[2223,3186,3187,3190,3192,3194],{"class":2225,"line":2504},[2223,3188,3189],{"class":3131},"  description",[2223,3191,2300],{"class":2908},[2223,3193,3138],{"class":3137},[2223,3195,2889],{"class":2328},[2223,3197,3198,3201,3203,3205],{"class":2225,"line":2510},[2223,3199,3200],{"class":3131},"  slug",[2223,3202,2300],{"class":2908},[2223,3204,3138],{"class":3137},[2223,3206,2889],{"class":2328},[2223,3208,3209,3212,3215,3217],{"class":2225,"line":2516},[2223,3210,3211],{"class":3131},"  image",[2223,3213,3214],{"class":2908},"?:",[2223,3216,3138],{"class":3137},[2223,3218,2889],{"class":2328},[2223,3220,3221,3224,3226,3228],{"class":2225,"line":2526},[2223,3222,3223],{"class":3131},"  locale",[2223,3225,2300],{"class":2908},[2223,3227,3138],{"class":3137},[2223,3229,2889],{"class":2328},[2223,3231,3232,3234,3236,3238],{"class":2225,"line":2540},[2223,3233,3145],{"class":3131},[2223,3235,2300],{"class":2908},[2223,3237,3138],{"class":3137},[2223,3239,2889],{"class":2328},[2223,3241,3242],{"class":2225,"line":2552},[2223,3243,3156],{"class":2328},[2223,3245,3246],{"class":2225,"line":2563},[2223,3247,2616],{"emptyLinePlaceholder":33},[2223,3249,3250,3252,3254,3257,3259],{"class":2225,"line":2571},[2223,3251,2319],{"class":2318},[2223,3253,3097],{"class":2900},[2223,3255,3256],{"class":3100}," Author",[2223,3258,2909],{"class":2908},[2223,3260,2379],{"class":2328},[2223,3262,3263,3266,3268,3270],{"class":2225,"line":2581},[2223,3264,3265],{"class":3131},"  name",[2223,3267,2300],{"class":2908},[2223,3269,3138],{"class":3137},[2223,3271,2889],{"class":2328},[2223,3273,3274,3276,3278,3280],{"class":2225,"line":2592},[2223,3275,3200],{"class":3131},[2223,3277,2300],{"class":2908},[2223,3279,3138],{"class":3137},[2223,3281,2889],{"class":2328},[2223,3283,3284,3287,3289,3291],{"class":2225,"line":2601},[2223,3285,3286],{"class":3131},"  bio",[2223,3288,2300],{"class":2908},[2223,3290,3138],{"class":3137},[2223,3292,2889],{"class":2328},[2223,3294,3295,3298,3300,3302],{"class":2225,"line":2607},[2223,3296,3297],{"class":3131},"  avatar",[2223,3299,2300],{"class":2908},[2223,3301,3138],{"class":3137},[2223,3303,2889],{"class":2328},[2223,3305,3306,3308,3310,3312],{"class":2225,"line":2613},[2223,3307,3223],{"class":3131},[2223,3309,2300],{"class":2908},[2223,3311,3138],{"class":3137},[2223,3313,2889],{"class":2328},[2223,3315,3316],{"class":2225,"line":2619},[2223,3317,3156],{"class":2328},[2223,3319,3320],{"class":2225,"line":2627},[2223,3321,2616],{"emptyLinePlaceholder":33},[2223,3323,3324],{"class":2225,"line":2635},[2223,3325,3326],{"class":2312},"// Helper functions to get collections\n",[2223,3328,3329,3331,3333,3336,3338,3341,3344,3346,3348,3351,3354],{"class":2225,"line":2644},[2223,3330,2319],{"class":2318},[2223,3332,2901],{"class":2900},[2223,3334,3335],{"class":2229}," getArticlesCollection",[2223,3337,2909],{"class":2908},[2223,3339,3340],{"class":2328}," (",[2223,3342,3343],{"class":3131},"locale",[2223,3345,2300],{"class":2908},[2223,3347,3138],{"class":3137},[2223,3349,3350],{"class":2328},") ",[2223,3352,3353],{"class":2900},"=>",[2223,3355,2379],{"class":2328},[2223,3357,3358,3361,3364,3368,3370,3373,3376],{"class":2225,"line":2649},[2223,3359,3360],{"class":2318},"  return",[2223,3362,3363],{"class":2233}," `",[2223,3365,3367],{"class":3366},"se2iQ","${",[2223,3369,3343],{"class":2334},[2223,3371,3372],{"class":3366},"}",[2223,3374,3375],{"class":2233},"/articles`",[2223,3377,2889],{"class":2328},[2223,3379,3380],{"class":2225,"line":2655},[2223,3381,3156],{"class":2328},[2223,3383,3385],{"class":2225,"line":3384},43,[2223,3386,2616],{"emptyLinePlaceholder":33},[2223,3388,3390,3392,3394,3397,3399,3401,3403,3405,3407,3409,3411],{"class":2225,"line":3389},44,[2223,3391,2319],{"class":2318},[2223,3393,2901],{"class":2900},[2223,3395,3396],{"class":2229}," getCategoriesCollection",[2223,3398,2909],{"class":2908},[2223,3400,3340],{"class":2328},[2223,3402,3343],{"class":3131},[2223,3404,2300],{"class":2908},[2223,3406,3138],{"class":3137},[2223,3408,3350],{"class":2328},[2223,3410,3353],{"class":2900},[2223,3412,2379],{"class":2328},[2223,3414,3416,3418,3420,3422,3424,3426,3429],{"class":2225,"line":3415},45,[2223,3417,3360],{"class":2318},[2223,3419,3363],{"class":2233},[2223,3421,3367],{"class":3366},[2223,3423,3343],{"class":2334},[2223,3425,3372],{"class":3366},[2223,3427,3428],{"class":2233},"/categories`",[2223,3430,2889],{"class":2328},[2223,3432,3434],{"class":2225,"line":3433},46,[2223,3435,3156],{"class":2328},[2223,3437,3439],{"class":2225,"line":3438},47,[2223,3440,2616],{"emptyLinePlaceholder":33},[2223,3442,3444,3446,3448,3451,3453,3455,3457,3459,3461,3463,3465],{"class":2225,"line":3443},48,[2223,3445,2319],{"class":2318},[2223,3447,2901],{"class":2900},[2223,3449,3450],{"class":2229}," getAuthorsCollection",[2223,3452,2909],{"class":2908},[2223,3454,3340],{"class":2328},[2223,3456,3343],{"class":3131},[2223,3458,2300],{"class":2908},[2223,3460,3138],{"class":3137},[2223,3462,3350],{"class":2328},[2223,3464,3353],{"class":2900},[2223,3466,2379],{"class":2328},[2223,3468,3470,3472,3474,3476,3478,3480,3483],{"class":2225,"line":3469},49,[2223,3471,3360],{"class":2318},[2223,3473,3363],{"class":2233},[2223,3475,3367],{"class":3366},[2223,3477,3343],{"class":2334},[2223,3479,3372],{"class":3366},[2223,3481,3482],{"class":2233},"/authors`",[2223,3484,2889],{"class":2328},[2223,3486,3488],{"class":2225,"line":3487},50,[2223,3489,3156],{"class":2328},[16,3491,3493],{"id":3492},"step-5-build-the-blog-index-page","Step 5: Build the Blog Index Page",[12,3495,2852,3496,2300],{},[2220,3497,3498],{},"pages/index.vue",[2214,3500,3504],{"className":3501,"code":3502,"language":3503,"meta":24,"style":24},"language-vue shiki shiki-themes github-light dark-plus dark-plus","\u003Cscript setup lang=\"ts\">\nimport { getArticlesCollection, type Article } from \"@@/types/content\";\n\nconst { locale } = useI18n();\nconst localePath = useLocalePath();\n\n// Fetch articles for current locale\nconst { data: posts } = await useAsyncData\u003CArticle[]>(\n  `articles-${locale.value}`,\n  async () => {\n    const collection = getArticlesCollection(locale.value);\n    return queryCollection(collection).all();\n  },\n  { watch: [locale] }\n);\n\n// Get featured posts\nconst featuredPosts = computed(() => \n  posts.value?.filter(post => post.isFeatured) || []\n);\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cmain>\n    \u003Csection class=\"container py-12\">\n      \u003Ch1 class=\"text-4xl font-bold mb-8\">\n        {{ $t('blog.title') }}\n      \u003C/h1>\n      \n      \u003C!-- Featured Posts Grid -->\n      \u003Cdiv class=\"grid md:grid-cols-2 lg:grid-cols-3 gap-6\">\n        \u003CNuxtLink\n          v-for=\"post in featuredPosts\"\n          :key=\"post.path\"\n          :to=\"localePath(post.path)\"\n          class=\"border rounded-lg overflow-hidden hover:shadow-lg transition\"\n        >\n          \u003Cimg \n            :src=\"post.image\" \n            :alt=\"post.title\"\n            class=\"w-full h-48 object-cover\"\n          />\n          \u003Cdiv class=\"p-4\">\n            \u003Ch2 class=\"text-xl font-bold mb-2\">{{ post.title }}\u003C/h2>\n            \u003Cp class=\"text-gray-600\">{{ post.description }}\u003C/p>\n          \u003C/div>\n        \u003C/NuxtLink>\n      \u003C/div>\n    \u003C/section>\n  \u003C/main>\n\u003C/template>\n","vue",[2220,3505,3506,3531,3556,3560,3579,3593,3597,3602,3635,3657,3669,3692,3713,3717,3733,3737,3741,3746,3766,3805,3809,3818,3822,3831,3841,3859,3876,3892,3901,3906,3911,3927,3935,3955,3976,4003,4013,4018,4028,4051,4071,4081,4086,4101,4136,4168,4177,4187,4195,4204,4213],{"__ignoreMap":24},[2223,3507,3508,3511,3515,3519,3522,3525,3528],{"class":2225,"line":2226},[2223,3509,3113],{"class":3510},"sffyN",[2223,3512,3514],{"class":3513},"ssFZ1","script",[2223,3516,3518],{"class":3517},"sFcZJ"," setup",[2223,3520,3521],{"class":3517}," lang",[2223,3523,3524],{"class":2328},"=",[2223,3526,3527],{"class":2233},"\"ts\"",[2223,3529,3530],{"class":3510},">\n",[2223,3532,3533,3535,3537,3540,3542,3545,3547,3549,3551,3554],{"class":2225,"line":28},[2223,3534,2871],{"class":2318},[2223,3536,2874],{"class":2328},[2223,3538,3539],{"class":2334},"getArticlesCollection",[2223,3541,269],{"class":2328},[2223,3543,3544],{"class":2318},"type",[2223,3546,3101],{"class":2334},[2223,3548,2880],{"class":2328},[2223,3550,2883],{"class":2318},[2223,3552,3553],{"class":2233}," \"@@/types/content\"",[2223,3555,2889],{"class":2328},[2223,3557,3558],{"class":2225,"line":25},[2223,3559,2616],{"emptyLinePlaceholder":33},[2223,3561,3562,3565,3567,3569,3571,3573,3576],{"class":2225,"line":2341},[2223,3563,3564],{"class":2900},"const",[2223,3566,2874],{"class":2328},[2223,3568,3343],{"class":2904},[2223,3570,2880],{"class":2328},[2223,3572,3524],{"class":2908},[2223,3574,3575],{"class":2229}," useI18n",[2223,3577,3578],{"class":2328},"();\n",[2223,3580,3581,3583,3586,3588,3591],{"class":2225,"line":336},[2223,3582,3564],{"class":2900},[2223,3584,3585],{"class":2904}," localePath",[2223,3587,2909],{"class":2908},[2223,3589,3590],{"class":2229}," useLocalePath",[2223,3592,3578],{"class":2328},[2223,3594,3595],{"class":2225,"line":2357},[2223,3596,2616],{"emptyLinePlaceholder":33},[2223,3598,3599],{"class":2225,"line":2363},[2223,3600,3601],{"class":2312},"// Fetch articles for current locale\n",[2223,3603,3604,3606,3608,3611,3614,3617,3619,3621,3624,3627,3629,3632],{"class":2225,"line":2074},[2223,3605,3564],{"class":2900},[2223,3607,2874],{"class":2328},[2223,3609,3610],{"class":3131},"data",[2223,3612,3613],{"class":2328},": ",[2223,3615,3616],{"class":2904},"posts",[2223,3618,2880],{"class":2328},[2223,3620,3524],{"class":2908},[2223,3622,3623],{"class":2318}," await",[2223,3625,3626],{"class":2229}," useAsyncData",[2223,3628,3113],{"class":2328},[2223,3630,3631],{"class":3100},"Article",[2223,3633,3634],{"class":2328},"[]>(\n",[2223,3636,3637,3640,3642,3644,3647,3650,3652,3655],{"class":2225,"line":43},[2223,3638,3639],{"class":2233},"  `articles-",[2223,3641,3367],{"class":3366},[2223,3643,3343],{"class":2334},[2223,3645,260],{"class":3646},"s5T4v",[2223,3648,3649],{"class":2334},"value",[2223,3651,3372],{"class":3366},[2223,3653,3654],{"class":2233},"`",[2223,3656,2347],{"class":2328},[2223,3658,3659,3662,3665,3667],{"class":2225,"line":2382},[2223,3660,3661],{"class":2900},"  async",[2223,3663,3664],{"class":2328}," () ",[2223,3666,3353],{"class":2900},[2223,3668,2379],{"class":2328},[2223,3670,3671,3674,3677,3679,3681,3683,3685,3687,3689],{"class":2225,"line":1784},[2223,3672,3673],{"class":2900},"    const",[2223,3675,3676],{"class":2904}," collection",[2223,3678,2909],{"class":2908},[2223,3680,3335],{"class":2229},[2223,3682,3001],{"class":2328},[2223,3684,3343],{"class":2334},[2223,3686,260],{"class":2328},[2223,3688,3649],{"class":2334},[2223,3690,3691],{"class":2328},");\n",[2223,3693,3694,3697,3700,3702,3705,3708,3711],{"class":2225,"line":82},[2223,3695,3696],{"class":2318},"    return",[2223,3698,3699],{"class":2229}," queryCollection",[2223,3701,3001],{"class":2328},[2223,3703,3704],{"class":2334},"collection",[2223,3706,3707],{"class":2328},").",[2223,3709,3710],{"class":2229},"all",[2223,3712,3578],{"class":2328},[2223,3714,3715],{"class":2225,"line":1432},[2223,3716,2610],{"class":2328},[2223,3718,3719,3722,3725,3728,3730],{"class":2225,"line":369},[2223,3720,3721],{"class":2328},"  { ",[2223,3723,3724],{"class":2334},"watch:",[2223,3726,3727],{"class":2328}," [",[2223,3729,3343],{"class":2334},[2223,3731,3732],{"class":2328},"] }\n",[2223,3734,3735],{"class":2225,"line":2425},[2223,3736,3691],{"class":2328},[2223,3738,3739],{"class":2225,"line":1750},[2223,3740,2616],{"emptyLinePlaceholder":33},[2223,3742,3743],{"class":2225,"line":2105},[2223,3744,3745],{"class":2312},"// Get featured posts\n",[2223,3747,3748,3750,3753,3755,3758,3761,3763],{"class":2225,"line":2449},[2223,3749,3564],{"class":2900},[2223,3751,3752],{"class":2904}," featuredPosts",[2223,3754,2909],{"class":2908},[2223,3756,3757],{"class":2229}," computed",[2223,3759,3760],{"class":2328},"(() ",[2223,3762,3353],{"class":2900},[2223,3764,3765],{"class":2328}," \n",[2223,3767,3768,3771,3773,3775,3778,3781,3783,3786,3789,3792,3794,3797,3799,3802],{"class":2225,"line":2454},[2223,3769,3770],{"class":2334},"  posts",[2223,3772,260],{"class":2328},[2223,3774,3649],{"class":2334},[2223,3776,3777],{"class":2328},"?.",[2223,3779,3780],{"class":2229},"filter",[2223,3782,3001],{"class":2328},[2223,3784,3785],{"class":3131},"post",[2223,3787,3788],{"class":2900}," =>",[2223,3790,3791],{"class":2334}," post",[2223,3793,260],{"class":2328},[2223,3795,3796],{"class":2334},"isFeatured",[2223,3798,3350],{"class":2328},[2223,3800,3801],{"class":2908},"||",[2223,3803,3804],{"class":2328}," []\n",[2223,3806,3807],{"class":2225,"line":1839},[2223,3808,3691],{"class":2328},[2223,3810,3811,3814,3816],{"class":2225,"line":2473},[2223,3812,3813],{"class":3510},"\u003C/",[2223,3815,3514],{"class":3513},[2223,3817,3530],{"class":3510},[2223,3819,3820],{"class":2225,"line":2483},[2223,3821,2616],{"emptyLinePlaceholder":33},[2223,3823,3824,3826,3829],{"class":2225,"line":2493},[2223,3825,3113],{"class":3510},[2223,3827,3828],{"class":3513},"template",[2223,3830,3530],{"class":3510},[2223,3832,3833,3836,3839],{"class":2225,"line":2504},[2223,3834,3835],{"class":3510},"  \u003C",[2223,3837,3838],{"class":3513},"main",[2223,3840,3530],{"class":3510},[2223,3842,3843,3846,3849,3852,3854,3857],{"class":2225,"line":2510},[2223,3844,3845],{"class":3510},"    \u003C",[2223,3847,3848],{"class":3513},"section",[2223,3850,3851],{"class":3517}," class",[2223,3853,3524],{"class":2328},[2223,3855,3856],{"class":2233},"\"container py-12\"",[2223,3858,3530],{"class":3510},[2223,3860,3861,3864,3867,3869,3871,3874],{"class":2225,"line":2516},[2223,3862,3863],{"class":3510},"      \u003C",[2223,3865,3866],{"class":3513},"h1",[2223,3868,3851],{"class":3517},[2223,3870,3524],{"class":2328},[2223,3872,3873],{"class":2233},"\"text-4xl font-bold mb-8\"",[2223,3875,3530],{"class":3510},[2223,3877,3878,3881,3884,3886,3889],{"class":2225,"line":2526},[2223,3879,3880],{"class":2328},"        {{ ",[2223,3882,3883],{"class":2229},"$t",[2223,3885,3001],{"class":2328},[2223,3887,3888],{"class":2233},"'blog.title'",[2223,3890,3891],{"class":2328},") }}\n",[2223,3893,3894,3897,3899],{"class":2225,"line":2540},[2223,3895,3896],{"class":3510},"      \u003C/",[2223,3898,3866],{"class":3513},[2223,3900,3530],{"class":3510},[2223,3902,3903],{"class":2225,"line":2552},[2223,3904,3905],{"class":2328},"      \n",[2223,3907,3908],{"class":2225,"line":2563},[2223,3909,3910],{"class":2312},"      \u003C!-- Featured Posts Grid -->\n",[2223,3912,3913,3915,3918,3920,3922,3925],{"class":2225,"line":2571},[2223,3914,3863],{"class":3510},[2223,3916,3917],{"class":3513},"div",[2223,3919,3851],{"class":3517},[2223,3921,3524],{"class":2328},[2223,3923,3924],{"class":2233},"\"grid md:grid-cols-2 lg:grid-cols-3 gap-6\"",[2223,3926,3530],{"class":3510},[2223,3928,3929,3932],{"class":2225,"line":2581},[2223,3930,3931],{"class":3510},"        \u003C",[2223,3933,3934],{"class":3513},"NuxtLink\n",[2223,3936,3937,3940,3942,3945,3947,3950,3952],{"class":2225,"line":2592},[2223,3938,3939],{"class":2318},"          v-for",[2223,3941,3524],{"class":2328},[2223,3943,3944],{"class":3646},"\"",[2223,3946,3785],{"class":2334},[2223,3948,3949],{"class":2900}," in",[2223,3951,3752],{"class":2334},[2223,3953,3954],{"class":3646},"\"\n",[2223,3956,3957,3960,3963,3965,3967,3969,3971,3974],{"class":2225,"line":2601},[2223,3958,3959],{"class":2328},"          :",[2223,3961,3962],{"class":3517},"key",[2223,3964,3524],{"class":2328},[2223,3966,3944],{"class":3646},[2223,3968,3785],{"class":2334},[2223,3970,260],{"class":2328},[2223,3972,3973],{"class":2334},"path",[2223,3975,3954],{"class":3646},[2223,3977,3978,3980,3983,3985,3987,3990,3992,3994,3996,3998,4001],{"class":2225,"line":2607},[2223,3979,3959],{"class":2328},[2223,3981,3982],{"class":3517},"to",[2223,3984,3524],{"class":2328},[2223,3986,3944],{"class":3646},[2223,3988,3989],{"class":2229},"localePath",[2223,3991,3001],{"class":2328},[2223,3993,3785],{"class":2334},[2223,3995,260],{"class":2328},[2223,3997,3973],{"class":2334},[2223,3999,4000],{"class":2328},")",[2223,4002,3954],{"class":3646},[2223,4004,4005,4008,4010],{"class":2225,"line":2613},[2223,4006,4007],{"class":3517},"          class",[2223,4009,3524],{"class":2328},[2223,4011,4012],{"class":2233},"\"border rounded-lg overflow-hidden hover:shadow-lg transition\"\n",[2223,4014,4015],{"class":2225,"line":2619},[2223,4016,4017],{"class":3510},"        >\n",[2223,4019,4020,4023,4026],{"class":2225,"line":2627},[2223,4021,4022],{"class":3510},"          \u003C",[2223,4024,4025],{"class":3513},"img",[2223,4027,3765],{"class":2328},[2223,4029,4030,4033,4036,4038,4040,4042,4044,4047,4049],{"class":2225,"line":2635},[2223,4031,4032],{"class":2328},"            :",[2223,4034,4035],{"class":3517},"src",[2223,4037,3524],{"class":2328},[2223,4039,3944],{"class":3646},[2223,4041,3785],{"class":2334},[2223,4043,260],{"class":2328},[2223,4045,4046],{"class":2334},"image",[2223,4048,3944],{"class":3646},[2223,4050,3765],{"class":2328},[2223,4052,4053,4055,4058,4060,4062,4064,4066,4069],{"class":2225,"line":2644},[2223,4054,4032],{"class":2328},[2223,4056,4057],{"class":3517},"alt",[2223,4059,3524],{"class":2328},[2223,4061,3944],{"class":3646},[2223,4063,3785],{"class":2334},[2223,4065,260],{"class":2328},[2223,4067,4068],{"class":2334},"title",[2223,4070,3954],{"class":3646},[2223,4072,4073,4076,4078],{"class":2225,"line":2649},[2223,4074,4075],{"class":3517},"            class",[2223,4077,3524],{"class":2328},[2223,4079,4080],{"class":2233},"\"w-full h-48 object-cover\"\n",[2223,4082,4083],{"class":2225,"line":2655},[2223,4084,4085],{"class":3510},"          />\n",[2223,4087,4088,4090,4092,4094,4096,4099],{"class":2225,"line":3384},[2223,4089,4022],{"class":3510},[2223,4091,3917],{"class":3513},[2223,4093,3851],{"class":3517},[2223,4095,3524],{"class":2328},[2223,4097,4098],{"class":2233},"\"p-4\"",[2223,4100,3530],{"class":3510},[2223,4102,4103,4106,4108,4110,4112,4115,4118,4121,4123,4125,4127,4130,4132,4134],{"class":2225,"line":3389},[2223,4104,4105],{"class":3510},"            \u003C",[2223,4107,16],{"class":3513},[2223,4109,3851],{"class":3517},[2223,4111,3524],{"class":2328},[2223,4113,4114],{"class":2233},"\"text-xl font-bold mb-2\"",[2223,4116,4117],{"class":3510},">",[2223,4119,4120],{"class":2328},"{{ ",[2223,4122,3785],{"class":2334},[2223,4124,260],{"class":2328},[2223,4126,4068],{"class":2334},[2223,4128,4129],{"class":2328}," }}",[2223,4131,3813],{"class":3510},[2223,4133,16],{"class":3513},[2223,4135,3530],{"class":3510},[2223,4137,4138,4140,4142,4144,4146,4149,4151,4153,4155,4157,4160,4162,4164,4166],{"class":2225,"line":3415},[2223,4139,4105],{"class":3510},[2223,4141,12],{"class":3513},[2223,4143,3851],{"class":3517},[2223,4145,3524],{"class":2328},[2223,4147,4148],{"class":2233},"\"text-gray-600\"",[2223,4150,4117],{"class":3510},[2223,4152,4120],{"class":2328},[2223,4154,3785],{"class":2334},[2223,4156,260],{"class":2328},[2223,4158,4159],{"class":2334},"description",[2223,4161,4129],{"class":2328},[2223,4163,3813],{"class":3510},[2223,4165,12],{"class":3513},[2223,4167,3530],{"class":3510},[2223,4169,4170,4173,4175],{"class":2225,"line":3433},[2223,4171,4172],{"class":3510},"          \u003C/",[2223,4174,3917],{"class":3513},[2223,4176,3530],{"class":3510},[2223,4178,4179,4182,4185],{"class":2225,"line":3438},[2223,4180,4181],{"class":3510},"        \u003C/",[2223,4183,4184],{"class":3513},"NuxtLink",[2223,4186,3530],{"class":3510},[2223,4188,4189,4191,4193],{"class":2225,"line":3443},[2223,4190,3896],{"class":3510},[2223,4192,3917],{"class":3513},[2223,4194,3530],{"class":3510},[2223,4196,4197,4200,4202],{"class":2225,"line":3469},[2223,4198,4199],{"class":3510},"    \u003C/",[2223,4201,3848],{"class":3513},[2223,4203,3530],{"class":3510},[2223,4205,4206,4209,4211],{"class":2225,"line":3487},[2223,4207,4208],{"class":3510},"  \u003C/",[2223,4210,3838],{"class":3513},[2223,4212,3530],{"class":3510},[2223,4214,4216,4218,4220],{"class":2225,"line":4215},51,[2223,4217,3813],{"class":3510},[2223,4219,3828],{"class":3513},[2223,4221,3530],{"class":3510},[16,4223,4225],{"id":4224},"step-6-create-article-detail-page","Step 6: Create Article Detail Page",[12,4227,2852,4228,4231],{},[2220,4229,4230],{},"pages/[...slug].vue"," for dynamic article rendering:",[2214,4233,4235],{"className":3501,"code":4234,"language":3503,"meta":24,"style":24},"\u003Cscript setup lang=\"ts\">\nconst { locale } = useI18n();\nconst route = useRoute();\n\n// Construct the full path with locale\nconst path = `/${locale.value}/articles/${route.params.slug}`;\n\nconst { data: article } = await useAsyncData(`article-${path}`, () =>\n  queryContent()\n    .where({ _path: path })\n    .findOne()\n);\n\nif (!article.value) {\n  throw createError({ \n    statusCode: 404, \n    statusMessage: \"Article not found\" \n  });\n}\n\n// Set SEO meta\nuseHead({\n  title: article.value.title,\n  meta: [\n    { name: \"description\", content: article.value.description },\n    { property: \"og:title\", content: article.value.title },\n    { property: \"og:description\", content: article.value.description },\n    { property: \"og:image\", content: article.value.image },\n  ],\n});\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Carticle class=\"container prose prose-lg mx-auto py-12\">\n    \u003Ch1>{{ article.title }}\u003C/h1>\n    \u003Cdiv class=\"text-gray-600 mb-8\">\n      {{ article.publishedAt }} • {{ article.readingTime }} min read\n    \u003C/div>\n    \n    \u003CContentRenderer :value=\"article\" />\n  \u003C/article>\n\u003C/template>\n",[2220,4236,4237,4253,4269,4283,4287,4292,4338,4342,4382,4390,4409,4418,4422,4426,4445,4456,4468,4478,4483,4488,4492,4497,4504,4521,4528,4557,4583,4608,4633,4637,4641,4649,4653,4661,4676,4700,4715,4740,4748,4753,4776,4784],{"__ignoreMap":24},[2223,4238,4239,4241,4243,4245,4247,4249,4251],{"class":2225,"line":2226},[2223,4240,3113],{"class":3510},[2223,4242,3514],{"class":3513},[2223,4244,3518],{"class":3517},[2223,4246,3521],{"class":3517},[2223,4248,3524],{"class":2328},[2223,4250,3527],{"class":2233},[2223,4252,3530],{"class":3510},[2223,4254,4255,4257,4259,4261,4263,4265,4267],{"class":2225,"line":28},[2223,4256,3564],{"class":2900},[2223,4258,2874],{"class":2328},[2223,4260,3343],{"class":2904},[2223,4262,2880],{"class":2328},[2223,4264,3524],{"class":2908},[2223,4266,3575],{"class":2229},[2223,4268,3578],{"class":2328},[2223,4270,4271,4273,4276,4278,4281],{"class":2225,"line":25},[2223,4272,3564],{"class":2900},[2223,4274,4275],{"class":2904}," route",[2223,4277,2909],{"class":2908},[2223,4279,4280],{"class":2229}," useRoute",[2223,4282,3578],{"class":2328},[2223,4284,4285],{"class":2225,"line":2341},[2223,4286,2616],{"emptyLinePlaceholder":33},[2223,4288,4289],{"class":2225,"line":336},[2223,4290,4291],{"class":2312},"// Construct the full path with locale\n",[2223,4293,4294,4296,4299,4301,4304,4306,4308,4310,4312,4314,4317,4319,4322,4324,4327,4329,4332,4334,4336],{"class":2225,"line":2357},[2223,4295,3564],{"class":2900},[2223,4297,4298],{"class":2904}," path",[2223,4300,2909],{"class":2908},[2223,4302,4303],{"class":2233}," `/",[2223,4305,3367],{"class":3366},[2223,4307,3343],{"class":2334},[2223,4309,260],{"class":3646},[2223,4311,3649],{"class":2334},[2223,4313,3372],{"class":3366},[2223,4315,4316],{"class":2233},"/articles/",[2223,4318,3367],{"class":3366},[2223,4320,4321],{"class":2334},"route",[2223,4323,260],{"class":3646},[2223,4325,4326],{"class":2334},"params",[2223,4328,260],{"class":3646},[2223,4330,4331],{"class":2334},"slug",[2223,4333,3372],{"class":3366},[2223,4335,3654],{"class":2233},[2223,4337,2889],{"class":2328},[2223,4339,4340],{"class":2225,"line":2363},[2223,4341,2616],{"emptyLinePlaceholder":33},[2223,4343,4344,4346,4348,4350,4352,4355,4357,4359,4361,4363,4365,4368,4370,4372,4374,4376,4379],{"class":2225,"line":2074},[2223,4345,3564],{"class":2900},[2223,4347,2874],{"class":2328},[2223,4349,3610],{"class":3131},[2223,4351,3613],{"class":2328},[2223,4353,4354],{"class":2904},"article",[2223,4356,2880],{"class":2328},[2223,4358,3524],{"class":2908},[2223,4360,3623],{"class":2318},[2223,4362,3626],{"class":2229},[2223,4364,3001],{"class":2328},[2223,4366,4367],{"class":2233},"`article-",[2223,4369,3367],{"class":3366},[2223,4371,3973],{"class":2334},[2223,4373,3372],{"class":3366},[2223,4375,3654],{"class":2233},[2223,4377,4378],{"class":2328},", () ",[2223,4380,4381],{"class":2900},"=>\n",[2223,4383,4384,4387],{"class":2225,"line":43},[2223,4385,4386],{"class":2229},"  queryContent",[2223,4388,4389],{"class":2328},"()\n",[2223,4391,4392,4395,4398,4401,4404,4406],{"class":2225,"line":2382},[2223,4393,4394],{"class":2328},"    .",[2223,4396,4397],{"class":2229},"where",[2223,4399,4400],{"class":2328},"({ ",[2223,4402,4403],{"class":2334},"_path:",[2223,4405,4298],{"class":2334},[2223,4407,4408],{"class":2328}," })\n",[2223,4410,4411,4413,4416],{"class":2225,"line":1784},[2223,4412,4394],{"class":2328},[2223,4414,4415],{"class":2229},"findOne",[2223,4417,4389],{"class":2328},[2223,4419,4420],{"class":2225,"line":82},[2223,4421,3691],{"class":2328},[2223,4423,4424],{"class":2225,"line":1432},[2223,4425,2616],{"emptyLinePlaceholder":33},[2223,4427,4428,4431,4433,4436,4438,4440,4442],{"class":2225,"line":369},[2223,4429,4430],{"class":2318},"if",[2223,4432,3340],{"class":2328},[2223,4434,4435],{"class":2908},"!",[2223,4437,4354],{"class":2334},[2223,4439,260],{"class":2328},[2223,4441,3649],{"class":2334},[2223,4443,4444],{"class":2328},") {\n",[2223,4446,4447,4450,4453],{"class":2225,"line":2425},[2223,4448,4449],{"class":2318},"  throw",[2223,4451,4452],{"class":2229}," createError",[2223,4454,4455],{"class":2328},"({ \n",[2223,4457,4458,4461,4465],{"class":2225,"line":1750},[2223,4459,4460],{"class":2334},"    statusCode:",[2223,4462,4464],{"class":4463},"seC34"," 404",[2223,4466,4467],{"class":2328},", \n",[2223,4469,4470,4473,4476],{"class":2225,"line":2105},[2223,4471,4472],{"class":2334},"    statusMessage:",[2223,4474,4475],{"class":2233}," \"Article not found\"",[2223,4477,3765],{"class":2328},[2223,4479,4480],{"class":2225,"line":2449},[2223,4481,4482],{"class":2328},"  });\n",[2223,4484,4485],{"class":2225,"line":2454},[2223,4486,4487],{"class":2328},"}\n",[2223,4489,4490],{"class":2225,"line":1839},[2223,4491,2616],{"emptyLinePlaceholder":33},[2223,4493,4494],{"class":2225,"line":2473},[2223,4495,4496],{"class":2312},"// Set SEO meta\n",[2223,4498,4499,4502],{"class":2225,"line":2483},[2223,4500,4501],{"class":2229},"useHead",[2223,4503,2329],{"class":2328},[2223,4505,4506,4508,4511,4513,4515,4517,4519],{"class":2225,"line":2493},[2223,4507,2924],{"class":2334},[2223,4509,4510],{"class":2334}," article",[2223,4512,260],{"class":2328},[2223,4514,3649],{"class":2334},[2223,4516,260],{"class":2328},[2223,4518,4068],{"class":2334},[2223,4520,2347],{"class":2328},[2223,4522,4523,4526],{"class":2225,"line":2504},[2223,4524,4525],{"class":2334},"  meta:",[2223,4527,2338],{"class":2328},[2223,4529,4530,4533,4536,4539,4541,4544,4546,4548,4550,4552,4554],{"class":2225,"line":2510},[2223,4531,4532],{"class":2328},"    { ",[2223,4534,4535],{"class":2334},"name:",[2223,4537,4538],{"class":2233}," \"description\"",[2223,4540,269],{"class":2328},[2223,4542,4543],{"class":2334},"content:",[2223,4545,4510],{"class":2334},[2223,4547,260],{"class":2328},[2223,4549,3649],{"class":2334},[2223,4551,260],{"class":2328},[2223,4553,4159],{"class":2334},[2223,4555,4556],{"class":2328}," },\n",[2223,4558,4559,4561,4564,4567,4569,4571,4573,4575,4577,4579,4581],{"class":2225,"line":2516},[2223,4560,4532],{"class":2328},[2223,4562,4563],{"class":2334},"property:",[2223,4565,4566],{"class":2233}," \"og:title\"",[2223,4568,269],{"class":2328},[2223,4570,4543],{"class":2334},[2223,4572,4510],{"class":2334},[2223,4574,260],{"class":2328},[2223,4576,3649],{"class":2334},[2223,4578,260],{"class":2328},[2223,4580,4068],{"class":2334},[2223,4582,4556],{"class":2328},[2223,4584,4585,4587,4589,4592,4594,4596,4598,4600,4602,4604,4606],{"class":2225,"line":2526},[2223,4586,4532],{"class":2328},[2223,4588,4563],{"class":2334},[2223,4590,4591],{"class":2233}," \"og:description\"",[2223,4593,269],{"class":2328},[2223,4595,4543],{"class":2334},[2223,4597,4510],{"class":2334},[2223,4599,260],{"class":2328},[2223,4601,3649],{"class":2334},[2223,4603,260],{"class":2328},[2223,4605,4159],{"class":2334},[2223,4607,4556],{"class":2328},[2223,4609,4610,4612,4614,4617,4619,4621,4623,4625,4627,4629,4631],{"class":2225,"line":2540},[2223,4611,4532],{"class":2328},[2223,4613,4563],{"class":2334},[2223,4615,4616],{"class":2233}," \"og:image\"",[2223,4618,269],{"class":2328},[2223,4620,4543],{"class":2334},[2223,4622,4510],{"class":2334},[2223,4624,260],{"class":2328},[2223,4626,3649],{"class":2334},[2223,4628,260],{"class":2328},[2223,4630,4046],{"class":2334},[2223,4632,4556],{"class":2328},[2223,4634,4635],{"class":2225,"line":2552},[2223,4636,2366],{"class":2328},[2223,4638,4639],{"class":2225,"line":2563},[2223,4640,2658],{"class":2328},[2223,4642,4643,4645,4647],{"class":2225,"line":2571},[2223,4644,3813],{"class":3510},[2223,4646,3514],{"class":3513},[2223,4648,3530],{"class":3510},[2223,4650,4651],{"class":2225,"line":2581},[2223,4652,2616],{"emptyLinePlaceholder":33},[2223,4654,4655,4657,4659],{"class":2225,"line":2592},[2223,4656,3113],{"class":3510},[2223,4658,3828],{"class":3513},[2223,4660,3530],{"class":3510},[2223,4662,4663,4665,4667,4669,4671,4674],{"class":2225,"line":2601},[2223,4664,3835],{"class":3510},[2223,4666,4354],{"class":3513},[2223,4668,3851],{"class":3517},[2223,4670,3524],{"class":2328},[2223,4672,4673],{"class":2233},"\"container prose prose-lg mx-auto py-12\"",[2223,4675,3530],{"class":3510},[2223,4677,4678,4680,4682,4684,4686,4688,4690,4692,4694,4696,4698],{"class":2225,"line":2607},[2223,4679,3845],{"class":3510},[2223,4681,3866],{"class":3513},[2223,4683,4117],{"class":3510},[2223,4685,4120],{"class":2328},[2223,4687,4354],{"class":2334},[2223,4689,260],{"class":2328},[2223,4691,4068],{"class":2334},[2223,4693,4129],{"class":2328},[2223,4695,3813],{"class":3510},[2223,4697,3866],{"class":3513},[2223,4699,3530],{"class":3510},[2223,4701,4702,4704,4706,4708,4710,4713],{"class":2225,"line":2613},[2223,4703,3845],{"class":3510},[2223,4705,3917],{"class":3513},[2223,4707,3851],{"class":3517},[2223,4709,3524],{"class":2328},[2223,4711,4712],{"class":2233},"\"text-gray-600 mb-8\"",[2223,4714,3530],{"class":3510},[2223,4716,4717,4720,4722,4724,4727,4730,4732,4734,4737],{"class":2225,"line":2619},[2223,4718,4719],{"class":2328},"      {{ ",[2223,4721,4354],{"class":2334},[2223,4723,260],{"class":2328},[2223,4725,4726],{"class":2334},"publishedAt",[2223,4728,4729],{"class":2328}," }} • {{ ",[2223,4731,4354],{"class":2334},[2223,4733,260],{"class":2328},[2223,4735,4736],{"class":2334},"readingTime",[2223,4738,4739],{"class":2328}," }} min read\n",[2223,4741,4742,4744,4746],{"class":2225,"line":2627},[2223,4743,4199],{"class":3510},[2223,4745,3917],{"class":3513},[2223,4747,3530],{"class":3510},[2223,4749,4750],{"class":2225,"line":2635},[2223,4751,4752],{"class":2328},"    \n",[2223,4754,4755,4757,4760,4763,4765,4767,4769,4771,4773],{"class":2225,"line":2644},[2223,4756,3845],{"class":3510},[2223,4758,4759],{"class":3513},"ContentRenderer",[2223,4761,4762],{"class":2328}," :",[2223,4764,3649],{"class":3517},[2223,4766,3524],{"class":2328},[2223,4768,3944],{"class":3646},[2223,4770,4354],{"class":2334},[2223,4772,3944],{"class":3646},[2223,4774,4775],{"class":3510}," />\n",[2223,4777,4778,4780,4782],{"class":2225,"line":2649},[2223,4779,4208],{"class":3510},[2223,4781,4354],{"class":3513},[2223,4783,3530],{"class":3510},[2223,4785,4786,4788,4790],{"class":2225,"line":2655},[2223,4787,3813],{"class":3510},[2223,4789,3828],{"class":3513},[2223,4791,3530],{"class":3510},[16,4793,4795],{"id":4794},"step-7-implement-language-switcher","Step 7: Implement Language Switcher",[12,4797,2852,4798,2300],{},[2220,4799,4800],{},"components/LanguageSwitcher.vue",[2214,4802,4804],{"className":3501,"code":4803,"language":3503,"meta":24,"style":24},"\u003Cscript setup lang=\"ts\">\nconst { locale, locales } = useI18n();\nconst switchLocalePath = useSwitchLocalePath();\n\nconst availableLocales = computed(() => \n  (locales.value as Array\u003C{code: string, name: string}>)\n    .filter(l => l.code !== locale.value)\n);\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cdiv class=\"flex gap-2\">\n    \u003CNuxtLink\n      v-for=\"loc in availableLocales\"\n      :key=\"loc.code\"\n      :to=\"switchLocalePath(loc.code)\"\n      class=\"px-3 py-1 rounded border hover:bg-gray-100\"\n    >\n      {{ loc.name }}\n    \u003C/NuxtLink>\n  \u003C/div>\n\u003C/template>\n",[2220,4805,4806,4822,4843,4857,4861,4878,4915,4948,4952,4960,4964,4972,4987,4993,5011,5030,5055,5065,5070,5083,5091,5099],{"__ignoreMap":24},[2223,4807,4808,4810,4812,4814,4816,4818,4820],{"class":2225,"line":2226},[2223,4809,3113],{"class":3510},[2223,4811,3514],{"class":3513},[2223,4813,3518],{"class":3517},[2223,4815,3521],{"class":3517},[2223,4817,3524],{"class":2328},[2223,4819,3527],{"class":2233},[2223,4821,3530],{"class":3510},[2223,4823,4824,4826,4828,4830,4832,4835,4837,4839,4841],{"class":2225,"line":28},[2223,4825,3564],{"class":2900},[2223,4827,2874],{"class":2328},[2223,4829,3343],{"class":2904},[2223,4831,269],{"class":2328},[2223,4833,4834],{"class":2904},"locales",[2223,4836,2880],{"class":2328},[2223,4838,3524],{"class":2908},[2223,4840,3575],{"class":2229},[2223,4842,3578],{"class":2328},[2223,4844,4845,4847,4850,4852,4855],{"class":2225,"line":25},[2223,4846,3564],{"class":2900},[2223,4848,4849],{"class":2904}," switchLocalePath",[2223,4851,2909],{"class":2908},[2223,4853,4854],{"class":2229}," useSwitchLocalePath",[2223,4856,3578],{"class":2328},[2223,4858,4859],{"class":2225,"line":2341},[2223,4860,2616],{"emptyLinePlaceholder":33},[2223,4862,4863,4865,4868,4870,4872,4874,4876],{"class":2225,"line":336},[2223,4864,3564],{"class":2900},[2223,4866,4867],{"class":2904}," availableLocales",[2223,4869,2909],{"class":2908},[2223,4871,3757],{"class":2229},[2223,4873,3760],{"class":2328},[2223,4875,3353],{"class":2900},[2223,4877,3765],{"class":2328},[2223,4879,4880,4883,4885,4887,4889,4892,4895,4898,4900,4902,4904,4906,4908,4910,4912],{"class":2225,"line":2357},[2223,4881,4882],{"class":2328},"  (",[2223,4884,4834],{"class":2334},[2223,4886,260],{"class":2328},[2223,4888,3649],{"class":2334},[2223,4890,4891],{"class":2318}," as",[2223,4893,4894],{"class":3100}," Array",[2223,4896,4897],{"class":2328},"\u003C{",[2223,4899,2220],{"class":3131},[2223,4901,2300],{"class":2908},[2223,4903,3138],{"class":3137},[2223,4905,269],{"class":2328},[2223,4907,167],{"class":3131},[2223,4909,2300],{"class":2908},[2223,4911,3138],{"class":3137},[2223,4913,4914],{"class":2328},"}>)\n",[2223,4916,4917,4919,4921,4923,4926,4928,4931,4933,4935,4938,4941,4943,4945],{"class":2225,"line":2363},[2223,4918,4394],{"class":2328},[2223,4920,3780],{"class":2229},[2223,4922,3001],{"class":2328},[2223,4924,4925],{"class":3131},"l",[2223,4927,3788],{"class":2900},[2223,4929,4930],{"class":2334}," l",[2223,4932,260],{"class":2328},[2223,4934,2220],{"class":2334},[2223,4936,4937],{"class":2908}," !==",[2223,4939,4940],{"class":2334}," locale",[2223,4942,260],{"class":2328},[2223,4944,3649],{"class":2334},[2223,4946,4947],{"class":2328},")\n",[2223,4949,4950],{"class":2225,"line":2074},[2223,4951,3691],{"class":2328},[2223,4953,4954,4956,4958],{"class":2225,"line":43},[2223,4955,3813],{"class":3510},[2223,4957,3514],{"class":3513},[2223,4959,3530],{"class":3510},[2223,4961,4962],{"class":2225,"line":2382},[2223,4963,2616],{"emptyLinePlaceholder":33},[2223,4965,4966,4968,4970],{"class":2225,"line":1784},[2223,4967,3113],{"class":3510},[2223,4969,3828],{"class":3513},[2223,4971,3530],{"class":3510},[2223,4973,4974,4976,4978,4980,4982,4985],{"class":2225,"line":82},[2223,4975,3835],{"class":3510},[2223,4977,3917],{"class":3513},[2223,4979,3851],{"class":3517},[2223,4981,3524],{"class":2328},[2223,4983,4984],{"class":2233},"\"flex gap-2\"",[2223,4986,3530],{"class":3510},[2223,4988,4989,4991],{"class":2225,"line":1432},[2223,4990,3845],{"class":3510},[2223,4992,3934],{"class":3513},[2223,4994,4995,4998,5000,5002,5005,5007,5009],{"class":2225,"line":369},[2223,4996,4997],{"class":2318},"      v-for",[2223,4999,3524],{"class":2328},[2223,5001,3944],{"class":3646},[2223,5003,5004],{"class":2334},"loc",[2223,5006,3949],{"class":2900},[2223,5008,4867],{"class":2334},[2223,5010,3954],{"class":3646},[2223,5012,5013,5016,5018,5020,5022,5024,5026,5028],{"class":2225,"line":2425},[2223,5014,5015],{"class":2328},"      :",[2223,5017,3962],{"class":3517},[2223,5019,3524],{"class":2328},[2223,5021,3944],{"class":3646},[2223,5023,5004],{"class":2334},[2223,5025,260],{"class":2328},[2223,5027,2220],{"class":2334},[2223,5029,3954],{"class":3646},[2223,5031,5032,5034,5036,5038,5040,5043,5045,5047,5049,5051,5053],{"class":2225,"line":1750},[2223,5033,5015],{"class":2328},[2223,5035,3982],{"class":3517},[2223,5037,3524],{"class":2328},[2223,5039,3944],{"class":3646},[2223,5041,5042],{"class":2229},"switchLocalePath",[2223,5044,3001],{"class":2328},[2223,5046,5004],{"class":2334},[2223,5048,260],{"class":2328},[2223,5050,2220],{"class":2334},[2223,5052,4000],{"class":2328},[2223,5054,3954],{"class":3646},[2223,5056,5057,5060,5062],{"class":2225,"line":2105},[2223,5058,5059],{"class":3517},"      class",[2223,5061,3524],{"class":2328},[2223,5063,5064],{"class":2233},"\"px-3 py-1 rounded border hover:bg-gray-100\"\n",[2223,5066,5067],{"class":2225,"line":2449},[2223,5068,5069],{"class":3510},"    >\n",[2223,5071,5072,5074,5076,5078,5080],{"class":2225,"line":2454},[2223,5073,4719],{"class":2328},[2223,5075,5004],{"class":2334},[2223,5077,260],{"class":2328},[2223,5079,167],{"class":2334},[2223,5081,5082],{"class":2328}," }}\n",[2223,5084,5085,5087,5089],{"class":2225,"line":1839},[2223,5086,4199],{"class":3510},[2223,5088,4184],{"class":3513},[2223,5090,3530],{"class":3510},[2223,5092,5093,5095,5097],{"class":2225,"line":2473},[2223,5094,4208],{"class":3510},[2223,5096,3917],{"class":3513},[2223,5098,3530],{"class":3510},[2223,5100,5101,5103,5105],{"class":2225,"line":2483},[2223,5102,3813],{"class":3510},[2223,5104,3828],{"class":3513},[2223,5106,3530],{"class":3510},[16,5108,5110],{"id":5109},"step-8-localized-category-display","Step 8: Localized Category Display",[12,5112,5113],{},"Create a composable to fetch category titles in the current locale.",[12,5115,2852,5116,2300],{},[2220,5117,5118],{},"composables/useCategoryTitle.ts",[2214,5120,5122],{"className":2303,"code":5121,"language":2305,"meta":24,"style":24},"import { getCategoriesCollection, type Category } from \"@@/types/content\";\n\nexport const useCategoryTitle = async (categorySlug: string) => {\n  const { locale } = useI18n();\n  \n  const { data: category } = await useAsyncData\u003CCategory | null>(\n    `category-${locale.value}-${categorySlug}`,\n    async () => {\n      const collection = getCategoriesCollection(locale.value);\n      const foundCategory = await queryCollection(collection)\n        .where(\"slug\", \"=\", categorySlug)\n        .first();\n      return foundCategory ?? null;\n    }\n  );\n\n  return computed(() => category.value?.title || categorySlug);\n};\n",[2220,5123,5124,5147,5151,5180,5197,5201,5236,5264,5275,5296,5315,5338,5347,5361,5365,5370,5374,5403],{"__ignoreMap":24},[2223,5125,5126,5128,5130,5133,5135,5137,5139,5141,5143,5145],{"class":2225,"line":2226},[2223,5127,2871],{"class":2318},[2223,5129,2874],{"class":2328},[2223,5131,5132],{"class":2334},"getCategoriesCollection",[2223,5134,269],{"class":2328},[2223,5136,3544],{"class":2318},[2223,5138,3169],{"class":2334},[2223,5140,2880],{"class":2328},[2223,5142,2883],{"class":2318},[2223,5144,3553],{"class":2233},[2223,5146,2889],{"class":2328},[2223,5148,5149],{"class":2225,"line":28},[2223,5150,2616],{"emptyLinePlaceholder":33},[2223,5152,5153,5155,5157,5160,5162,5165,5167,5170,5172,5174,5176,5178],{"class":2225,"line":25},[2223,5154,2319],{"class":2318},[2223,5156,2901],{"class":2900},[2223,5158,5159],{"class":2229}," useCategoryTitle",[2223,5161,2909],{"class":2908},[2223,5163,5164],{"class":2900}," async",[2223,5166,3340],{"class":2328},[2223,5168,5169],{"class":3131},"categorySlug",[2223,5171,2300],{"class":2908},[2223,5173,3138],{"class":3137},[2223,5175,3350],{"class":2328},[2223,5177,3353],{"class":2900},[2223,5179,2379],{"class":2328},[2223,5181,5182,5185,5187,5189,5191,5193,5195],{"class":2225,"line":2341},[2223,5183,5184],{"class":2900},"  const",[2223,5186,2874],{"class":2328},[2223,5188,3343],{"class":2904},[2223,5190,2880],{"class":2328},[2223,5192,3524],{"class":2908},[2223,5194,3575],{"class":2229},[2223,5196,3578],{"class":2328},[2223,5198,5199],{"class":2225,"line":336},[2223,5200,2371],{"class":2328},[2223,5202,5203,5205,5207,5209,5211,5214,5216,5218,5220,5222,5224,5227,5230,5233],{"class":2225,"line":2357},[2223,5204,5184],{"class":2900},[2223,5206,2874],{"class":2328},[2223,5208,3610],{"class":3131},[2223,5210,3613],{"class":2328},[2223,5212,5213],{"class":2904},"category",[2223,5215,2880],{"class":2328},[2223,5217,3524],{"class":2908},[2223,5219,3623],{"class":2318},[2223,5221,3626],{"class":2229},[2223,5223,3113],{"class":2328},[2223,5225,5226],{"class":3100},"Category",[2223,5228,5229],{"class":2908}," |",[2223,5231,5232],{"class":3137}," null",[2223,5234,5235],{"class":2328},">(\n",[2223,5237,5238,5241,5243,5245,5247,5249,5251,5254,5256,5258,5260,5262],{"class":2225,"line":2363},[2223,5239,5240],{"class":2233},"    `category-",[2223,5242,3367],{"class":3366},[2223,5244,3343],{"class":2334},[2223,5246,260],{"class":3646},[2223,5248,3649],{"class":2334},[2223,5250,3372],{"class":3366},[2223,5252,5253],{"class":2233},"-",[2223,5255,3367],{"class":3366},[2223,5257,5169],{"class":2334},[2223,5259,3372],{"class":3366},[2223,5261,3654],{"class":2233},[2223,5263,2347],{"class":2328},[2223,5265,5266,5269,5271,5273],{"class":2225,"line":2074},[2223,5267,5268],{"class":2900},"    async",[2223,5270,3664],{"class":2328},[2223,5272,3353],{"class":2900},[2223,5274,2379],{"class":2328},[2223,5276,5277,5280,5282,5284,5286,5288,5290,5292,5294],{"class":2225,"line":43},[2223,5278,5279],{"class":2900},"      const",[2223,5281,3676],{"class":2904},[2223,5283,2909],{"class":2908},[2223,5285,3396],{"class":2229},[2223,5287,3001],{"class":2328},[2223,5289,3343],{"class":2334},[2223,5291,260],{"class":2328},[2223,5293,3649],{"class":2334},[2223,5295,3691],{"class":2328},[2223,5297,5298,5300,5303,5305,5307,5309,5311,5313],{"class":2225,"line":2382},[2223,5299,5279],{"class":2900},[2223,5301,5302],{"class":2904}," foundCategory",[2223,5304,2909],{"class":2908},[2223,5306,3623],{"class":2318},[2223,5308,3699],{"class":2229},[2223,5310,3001],{"class":2328},[2223,5312,3704],{"class":2334},[2223,5314,4947],{"class":2328},[2223,5316,5317,5320,5322,5324,5327,5329,5332,5334,5336],{"class":2225,"line":1784},[2223,5318,5319],{"class":2328},"        .",[2223,5321,4397],{"class":2229},[2223,5323,3001],{"class":2328},[2223,5325,5326],{"class":2233},"\"slug\"",[2223,5328,269],{"class":2328},[2223,5330,5331],{"class":2233},"\"=\"",[2223,5333,269],{"class":2328},[2223,5335,5169],{"class":2334},[2223,5337,4947],{"class":2328},[2223,5339,5340,5342,5345],{"class":2225,"line":82},[2223,5341,5319],{"class":2328},[2223,5343,5344],{"class":2229},"first",[2223,5346,3578],{"class":2328},[2223,5348,5349,5352,5354,5357,5359],{"class":2225,"line":1432},[2223,5350,5351],{"class":2318},"      return",[2223,5353,5302],{"class":2334},[2223,5355,5356],{"class":2908}," ??",[2223,5358,5232],{"class":2546},[2223,5360,2889],{"class":2328},[2223,5362,5363],{"class":2225,"line":369},[2223,5364,2604],{"class":2328},[2223,5366,5367],{"class":2225,"line":2425},[2223,5368,5369],{"class":2328},"  );\n",[2223,5371,5372],{"class":2225,"line":1750},[2223,5373,2616],{"emptyLinePlaceholder":33},[2223,5375,5376,5378,5380,5382,5384,5387,5389,5391,5393,5395,5398,5401],{"class":2225,"line":2105},[2223,5377,3360],{"class":2318},[2223,5379,3757],{"class":2229},[2223,5381,3760],{"class":2328},[2223,5383,3353],{"class":2900},[2223,5385,5386],{"class":2334}," category",[2223,5388,260],{"class":2328},[2223,5390,3649],{"class":2334},[2223,5392,3777],{"class":2328},[2223,5394,4068],{"class":2334},[2223,5396,5397],{"class":2908}," ||",[2223,5399,5400],{"class":2334}," categorySlug",[2223,5402,3691],{"class":2328},[2223,5404,5405],{"class":2225,"line":2449},[2223,5406,3156],{"class":2328},[12,5408,5409],{},"Use it in your components:",[2214,5411,5413],{"className":3501,"code":5412,"language":3503,"meta":24,"style":24},"\u003Cscript setup lang=\"ts\">\nconst props = defineProps\u003C{ categorySlug: string }>();\nconst categoryTitle = await useCategoryTitle(props.categorySlug);\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cspan>{{ categoryTitle }}\u003C/span>\n\u003C/template>\n",[2220,5414,5415,5431,5455,5479,5487,5491,5499,5520],{"__ignoreMap":24},[2223,5416,5417,5419,5421,5423,5425,5427,5429],{"class":2225,"line":2226},[2223,5418,3113],{"class":3510},[2223,5420,3514],{"class":3513},[2223,5422,3518],{"class":3517},[2223,5424,3521],{"class":3517},[2223,5426,3524],{"class":2328},[2223,5428,3527],{"class":2233},[2223,5430,3530],{"class":3510},[2223,5432,5433,5435,5438,5440,5443,5446,5448,5450,5452],{"class":2225,"line":28},[2223,5434,3564],{"class":2900},[2223,5436,5437],{"class":2904}," props",[2223,5439,2909],{"class":2908},[2223,5441,5442],{"class":2229}," defineProps",[2223,5444,5445],{"class":2328},"\u003C{ ",[2223,5447,5169],{"class":3131},[2223,5449,2300],{"class":2908},[2223,5451,3138],{"class":3137},[2223,5453,5454],{"class":2328}," }>();\n",[2223,5456,5457,5459,5462,5464,5466,5468,5470,5473,5475,5477],{"class":2225,"line":25},[2223,5458,3564],{"class":2900},[2223,5460,5461],{"class":2904}," categoryTitle",[2223,5463,2909],{"class":2908},[2223,5465,3623],{"class":2318},[2223,5467,5159],{"class":2229},[2223,5469,3001],{"class":2328},[2223,5471,5472],{"class":2334},"props",[2223,5474,260],{"class":2328},[2223,5476,5169],{"class":2334},[2223,5478,3691],{"class":2328},[2223,5480,5481,5483,5485],{"class":2225,"line":2341},[2223,5482,3813],{"class":3510},[2223,5484,3514],{"class":3513},[2223,5486,3530],{"class":3510},[2223,5488,5489],{"class":2225,"line":336},[2223,5490,2616],{"emptyLinePlaceholder":33},[2223,5492,5493,5495,5497],{"class":2225,"line":2357},[2223,5494,3113],{"class":3510},[2223,5496,3828],{"class":3513},[2223,5498,3530],{"class":3510},[2223,5500,5501,5503,5505,5507,5509,5512,5514,5516,5518],{"class":2225,"line":2363},[2223,5502,3835],{"class":3510},[2223,5504,2223],{"class":3513},[2223,5506,4117],{"class":3510},[2223,5508,4120],{"class":2328},[2223,5510,5511],{"class":2334},"categoryTitle",[2223,5513,4129],{"class":2328},[2223,5515,3813],{"class":3510},[2223,5517,2223],{"class":3513},[2223,5519,3530],{"class":3510},[2223,5521,5522,5524,5526],{"class":2225,"line":2074},[2223,5523,3813],{"class":3510},[2223,5525,3828],{"class":3513},[2223,5527,3530],{"class":3510},[16,5529,5531],{"id":5530},"step-9-seo-optimization","Step 9: SEO Optimization",[12,5533,5534,5535,2680],{},"Add hreflang tags in your layouts (",[2220,5536,5537],{},"layouts/default.vue",[2214,5539,5541],{"className":3501,"code":5540,"language":3503,"meta":24,"style":24},"\u003Cscript setup lang=\"ts\">\nconst { locale } = useI18n();\nconst route = useRoute();\n\nconst i18nHead = useLocaleHead({\n  addDirAttribute: true,\n  identifierAttribute: \"id\",\n  addSeoAttributes: true,\n});\n\nuseHead(() => ({\n  htmlAttrs: {\n    lang: i18nHead.value.htmlAttrs!.lang,\n    dir: locale.value === 'ar' ? 'rtl' : 'ltr',\n  },\n  link: [...(i18nHead.value.link || [])],\n  meta: [...(i18nHead.value.meta || [])],\n}));\n\u003C/script>\n",[2220,5542,5543,5559,5575,5587,5591,5605,5614,5624,5633,5637,5641,5652,5659,5684,5714,5718,5747,5772,5777],{"__ignoreMap":24},[2223,5544,5545,5547,5549,5551,5553,5555,5557],{"class":2225,"line":2226},[2223,5546,3113],{"class":3510},[2223,5548,3514],{"class":3513},[2223,5550,3518],{"class":3517},[2223,5552,3521],{"class":3517},[2223,5554,3524],{"class":2328},[2223,5556,3527],{"class":2233},[2223,5558,3530],{"class":3510},[2223,5560,5561,5563,5565,5567,5569,5571,5573],{"class":2225,"line":28},[2223,5562,3564],{"class":2900},[2223,5564,2874],{"class":2328},[2223,5566,3343],{"class":2904},[2223,5568,2880],{"class":2328},[2223,5570,3524],{"class":2908},[2223,5572,3575],{"class":2229},[2223,5574,3578],{"class":2328},[2223,5576,5577,5579,5581,5583,5585],{"class":2225,"line":25},[2223,5578,3564],{"class":2900},[2223,5580,4275],{"class":2904},[2223,5582,2909],{"class":2908},[2223,5584,4280],{"class":2229},[2223,5586,3578],{"class":2328},[2223,5588,5589],{"class":2225,"line":2341},[2223,5590,2616],{"emptyLinePlaceholder":33},[2223,5592,5593,5595,5598,5600,5603],{"class":2225,"line":336},[2223,5594,3564],{"class":2900},[2223,5596,5597],{"class":2904}," i18nHead",[2223,5599,2909],{"class":2908},[2223,5601,5602],{"class":2229}," useLocaleHead",[2223,5604,2329],{"class":2328},[2223,5606,5607,5610,5612],{"class":2225,"line":2357},[2223,5608,5609],{"class":2334},"  addDirAttribute:",[2223,5611,2547],{"class":2546},[2223,5613,2347],{"class":2328},[2223,5615,5616,5619,5622],{"class":2225,"line":2363},[2223,5617,5618],{"class":2334},"  identifierAttribute:",[2223,5620,5621],{"class":2233}," \"id\"",[2223,5623,2347],{"class":2328},[2223,5625,5626,5629,5631],{"class":2225,"line":2074},[2223,5627,5628],{"class":2334},"  addSeoAttributes:",[2223,5630,2547],{"class":2546},[2223,5632,2347],{"class":2328},[2223,5634,5635],{"class":2225,"line":43},[2223,5636,2658],{"class":2328},[2223,5638,5639],{"class":2225,"line":2382},[2223,5640,2616],{"emptyLinePlaceholder":33},[2223,5642,5643,5645,5647,5649],{"class":2225,"line":1784},[2223,5644,4501],{"class":2229},[2223,5646,3760],{"class":2328},[2223,5648,3353],{"class":2900},[2223,5650,5651],{"class":2328}," ({\n",[2223,5653,5654,5657],{"class":2225,"line":82},[2223,5655,5656],{"class":2334},"  htmlAttrs:",[2223,5658,2379],{"class":2328},[2223,5660,5661,5664,5666,5668,5670,5672,5675,5677,5679,5682],{"class":2225,"line":1432},[2223,5662,5663],{"class":2334},"    lang:",[2223,5665,5597],{"class":2334},[2223,5667,260],{"class":2328},[2223,5669,3649],{"class":2334},[2223,5671,260],{"class":2328},[2223,5673,5674],{"class":2334},"htmlAttrs",[2223,5676,4435],{"class":2908},[2223,5678,260],{"class":2328},[2223,5680,5681],{"class":2334},"lang",[2223,5683,2347],{"class":2328},[2223,5685,5686,5689,5691,5693,5695,5698,5701,5704,5707,5709,5712],{"class":2225,"line":369},[2223,5687,5688],{"class":2334},"    dir:",[2223,5690,4940],{"class":2334},[2223,5692,260],{"class":2328},[2223,5694,3649],{"class":2334},[2223,5696,5697],{"class":2908}," ===",[2223,5699,5700],{"class":2233}," 'ar'",[2223,5702,5703],{"class":2908}," ?",[2223,5705,5706],{"class":2233}," 'rtl'",[2223,5708,4762],{"class":2908},[2223,5710,5711],{"class":2233}," 'ltr'",[2223,5713,2347],{"class":2328},[2223,5715,5716],{"class":2225,"line":2425},[2223,5717,2610],{"class":2328},[2223,5719,5720,5723,5725,5728,5730,5733,5735,5737,5739,5742,5744],{"class":2225,"line":1750},[2223,5721,5722],{"class":2334},"  link:",[2223,5724,3727],{"class":2328},[2223,5726,5727],{"class":2908},"...",[2223,5729,3001],{"class":2328},[2223,5731,5732],{"class":2334},"i18nHead",[2223,5734,260],{"class":2328},[2223,5736,3649],{"class":2334},[2223,5738,260],{"class":2328},[2223,5740,5741],{"class":2334},"link",[2223,5743,5397],{"class":2908},[2223,5745,5746],{"class":2328}," [])],\n",[2223,5748,5749,5751,5753,5755,5757,5759,5761,5763,5765,5768,5770],{"class":2225,"line":2105},[2223,5750,4525],{"class":2334},[2223,5752,3727],{"class":2328},[2223,5754,5727],{"class":2908},[2223,5756,3001],{"class":2328},[2223,5758,5732],{"class":2334},[2223,5760,260],{"class":2328},[2223,5762,3649],{"class":2334},[2223,5764,260],{"class":2328},[2223,5766,5767],{"class":2334},"meta",[2223,5769,5397],{"class":2908},[2223,5771,5746],{"class":2328},[2223,5773,5774],{"class":2225,"line":2449},[2223,5775,5776],{"class":2328},"}));\n",[2223,5778,5779,5781,5783],{"class":2225,"line":2454},[2223,5780,3813],{"class":3510},[2223,5782,3514],{"class":3513},[2223,5784,3530],{"class":3510},[16,5786,5788],{"id":5787},"step-10-rtl-support-with-tailwind","Step 10: RTL Support with Tailwind",[12,5790,2296,5791,2300],{},[2220,5792,5793],{},"tailwind.config.ts",[2214,5795,5797],{"className":2303,"code":5796,"language":2305,"meta":24,"style":24},"export default {\n  content: [\n    \"./components/**/*.{js,vue,ts}\",\n    \"./layouts/**/*.vue\",\n    \"./pages/**/*.vue\",\n    \"./app.vue\",\n  ],\n  theme: {\n    extend: {},\n  },\n  plugins: [\n    require(\"@tailwindcss/typography\"),\n  ],\n};\n",[2220,5798,5799,5807,5813,5820,5827,5834,5841,5845,5852,5860,5864,5871,5884,5888],{"__ignoreMap":24},[2223,5800,5801,5803,5805],{"class":2225,"line":2226},[2223,5802,2319],{"class":2318},[2223,5804,2322],{"class":2318},[2223,5806,2379],{"class":2328},[2223,5808,5809,5811],{"class":2225,"line":28},[2223,5810,2622],{"class":2334},[2223,5812,2338],{"class":2328},[2223,5814,5815,5818],{"class":2225,"line":25},[2223,5816,5817],{"class":2233},"    \"./components/**/*.{js,vue,ts}\"",[2223,5819,2347],{"class":2328},[2223,5821,5822,5825],{"class":2225,"line":2341},[2223,5823,5824],{"class":2233},"    \"./layouts/**/*.vue\"",[2223,5826,2347],{"class":2328},[2223,5828,5829,5832],{"class":2225,"line":336},[2223,5830,5831],{"class":2233},"    \"./pages/**/*.vue\"",[2223,5833,2347],{"class":2328},[2223,5835,5836,5839],{"class":2225,"line":2357},[2223,5837,5838],{"class":2233},"    \"./app.vue\"",[2223,5840,2347],{"class":2328},[2223,5842,5843],{"class":2225,"line":2363},[2223,5844,2366],{"class":2328},[2223,5846,5847,5850],{"class":2225,"line":2074},[2223,5848,5849],{"class":2334},"  theme:",[2223,5851,2379],{"class":2328},[2223,5853,5854,5857],{"class":2225,"line":43},[2223,5855,5856],{"class":2334},"    extend:",[2223,5858,5859],{"class":2328}," {},\n",[2223,5861,5862],{"class":2225,"line":2382},[2223,5863,2610],{"class":2328},[2223,5865,5866,5869],{"class":2225,"line":1784},[2223,5867,5868],{"class":2334},"  plugins:",[2223,5870,2338],{"class":2328},[2223,5872,5873,5876,5878,5881],{"class":2225,"line":82},[2223,5874,5875],{"class":2229},"    require",[2223,5877,3001],{"class":2328},[2223,5879,5880],{"class":2233},"\"@tailwindcss/typography\"",[2223,5882,5883],{"class":2328},"),\n",[2223,5885,5886],{"class":2225,"line":1432},[2223,5887,2366],{"class":2328},[2223,5889,5890],{"class":2225,"line":369},[2223,5891,3156],{"class":2328},[12,5893,5894,5895,2300],{},"Add RTL utility classes in ",[2220,5896,5897],{},"assets/css/tailwind.css",[2214,5899,5903],{"className":5900,"code":5901,"language":5902,"meta":24,"style":24},"language-css shiki shiki-themes github-light dark-plus dark-plus","@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n@layer base {\n  * {\n    @apply rtl:font-arabic ltr:font-latin;\n  }\n}\n","css",[2220,5904,5905,5913,5920,5927,5931,5939,5946,5968,5972],{"__ignoreMap":24},[2223,5906,5907,5910],{"class":2225,"line":2226},[2223,5908,5909],{"class":2318},"@tailwind",[2223,5911,5912],{"class":2328}," base;\n",[2223,5914,5915,5917],{"class":2225,"line":28},[2223,5916,5909],{"class":2318},[2223,5918,5919],{"class":2328}," components;\n",[2223,5921,5922,5924],{"class":2225,"line":25},[2223,5923,5909],{"class":2318},[2223,5925,5926],{"class":2328}," utilities;\n",[2223,5928,5929],{"class":2225,"line":2341},[2223,5930,2616],{"emptyLinePlaceholder":33},[2223,5932,5933,5936],{"class":2225,"line":336},[2223,5934,5935],{"class":2318},"@layer",[2223,5937,5938],{"class":2328}," base {\n",[2223,5940,5941,5944],{"class":2225,"line":2357},[2223,5942,5943],{"class":3513},"  *",[2223,5945,2379],{"class":2328},[2223,5947,5948,5951,5955,5958,5961,5965],{"class":2225,"line":2363},[2223,5949,5950],{"class":2328},"    @",[2223,5952,5954],{"class":5953},"se0Tf","apply",[2223,5956,5957],{"class":5953}," rtl",[2223,5959,5960],{"class":2328},":font-arabic ",[2223,5962,5964],{"class":5963},"sqBZk","ltr",[2223,5966,5967],{"class":2328},":font-latin;\n",[2223,5969,5970],{"class":2225,"line":2074},[2223,5971,2652],{"class":2328},[2223,5973,5974],{"class":2225,"line":43},[2223,5975,4487],{"class":2328},[12,5977,5978,5979,2300],{},"Configure fonts in ",[2220,5980,2299],{},[2214,5982,5984],{"className":2303,"code":5983,"language":2305,"meta":24,"style":24},"app: {\n  head: {\n    link: [\n      {\n        rel: 'stylesheet',\n        href: 'https://fonts.googleapis.com/css2?family=Almarai:wght@300;400;700&display=swap',\n      },\n      {\n        rel: 'stylesheet',\n        href: 'https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700&display=swap',\n      },\n    ],\n  },\n},\n",[2220,5985,5986,5995,6002,6010,6014,6024,6034,6038,6042,6050,6059,6063,6067,6071],{"__ignoreMap":24},[2223,5987,5988,5992],{"class":2225,"line":2226},[2223,5989,5991],{"class":5990},"sGRYn","app",[2223,5993,5994],{"class":2328},": {\n",[2223,5996,5997,6000],{"class":2225,"line":28},[2223,5998,5999],{"class":5990},"  head",[2223,6001,5994],{"class":2328},[2223,6003,6004,6007],{"class":2225,"line":25},[2223,6005,6006],{"class":5990},"    link",[2223,6008,6009],{"class":2328},": [\n",[2223,6011,6012],{"class":2225,"line":2341},[2223,6013,2392],{"class":2328},[2223,6015,6016,6019,6022],{"class":2225,"line":336},[2223,6017,6018],{"class":2334},"        rel:",[2223,6020,6021],{"class":2233}," 'stylesheet'",[2223,6023,2347],{"class":2328},[2223,6025,6026,6029,6032],{"class":2225,"line":2357},[2223,6027,6028],{"class":2334},"        href:",[2223,6030,6031],{"class":2233}," 'https://fonts.googleapis.com/css2?family=Almarai:wght@300;400;700&display=swap'",[2223,6033,2347],{"class":2328},[2223,6035,6036],{"class":2225,"line":2363},[2223,6037,2446],{"class":2328},[2223,6039,6040],{"class":2225,"line":2074},[2223,6041,2392],{"class":2328},[2223,6043,6044,6046,6048],{"class":2225,"line":43},[2223,6045,6018],{"class":2334},[2223,6047,6021],{"class":2233},[2223,6049,2347],{"class":2328},[2223,6051,6052,6054,6057],{"class":2225,"line":2382},[2223,6053,6028],{"class":2334},[2223,6055,6056],{"class":2233}," 'https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700&display=swap'",[2223,6058,2347],{"class":2328},[2223,6060,6061],{"class":2225,"line":1784},[2223,6062,2446],{"class":2328},[2223,6064,6065],{"class":2225,"line":82},[2223,6066,2513],{"class":2328},[2223,6068,6069],{"class":2225,"line":1432},[2223,6070,2610],{"class":2328},[2223,6072,6073],{"class":2225,"line":369},[2223,6074,6075],{"class":2328},"},\n",[16,6077,6079],{"id":6078},"best-practices-tips","Best Practices & Tips",[116,6081,6083],{"id":6082},"_1-use-consistent-slugs","1. Use Consistent Slugs",[12,6085,6086],{},"Keep the same slug across languages for easier cross-referencing:",[190,6088,6089,6095],{},[193,6090,6091,6092],{},"EN: ",[2220,6093,6094],{},"content/en/articles/my-post.md",[193,6096,6097,6098],{},"AR: ",[2220,6099,6100],{},"content/ar/articles/my-post.md",[116,6102,6104],{"id":6103},"_2-implement-fallback-content","2. Implement Fallback Content",[12,6106,6107],{},"Always provide fallback values when content might be missing:",[2214,6109,6111],{"className":3501,"code":6110,"language":3503,"meta":24,"style":24},"const categoryTitle = computed(() => \n  category.value?.title || post.category || 'Uncategorized'\n);\n",[2220,6112,6113,6118,6123],{"__ignoreMap":24},[2223,6114,6115],{"class":2225,"line":2226},[2223,6116,6117],{"class":2328},"const categoryTitle = computed(() => \n",[2223,6119,6120],{"class":2225,"line":28},[2223,6121,6122],{"class":2328},"  category.value?.title || post.category || 'Uncategorized'\n",[2223,6124,6125],{"class":2225,"line":25},[2223,6126,3691],{"class":2328},[116,6128,6130],{"id":6129},"_3-watch-for-locale-changes","3. Watch for Locale Changes",[12,6132,6133,6134,2300],{},"Make sure to watch locale changes in ",[2220,6135,6136],{},"useAsyncData",[2214,6138,6140],{"className":2303,"code":6139,"language":2305,"meta":24,"style":24},"const { data } = await useAsyncData(\n  `key-${locale.value}`,\n  () => fetchData(),\n  { watch: [locale] }  // Important!\n);\n",[2220,6141,6142,6161,6180,6192,6208],{"__ignoreMap":24},[2223,6143,6144,6146,6148,6150,6152,6154,6156,6158],{"class":2225,"line":2226},[2223,6145,3564],{"class":2900},[2223,6147,2874],{"class":2328},[2223,6149,3610],{"class":2904},[2223,6151,2880],{"class":2328},[2223,6153,3524],{"class":2908},[2223,6155,3623],{"class":2318},[2223,6157,3626],{"class":2229},[2223,6159,6160],{"class":2328},"(\n",[2223,6162,6163,6166,6168,6170,6172,6174,6176,6178],{"class":2225,"line":28},[2223,6164,6165],{"class":2233},"  `key-",[2223,6167,3367],{"class":3366},[2223,6169,3343],{"class":2334},[2223,6171,260],{"class":3646},[2223,6173,3649],{"class":2334},[2223,6175,3372],{"class":3366},[2223,6177,3654],{"class":2233},[2223,6179,2347],{"class":2328},[2223,6181,6182,6185,6187,6190],{"class":2225,"line":25},[2223,6183,6184],{"class":2328},"  () ",[2223,6186,3353],{"class":2900},[2223,6188,6189],{"class":2229}," fetchData",[2223,6191,2934],{"class":2328},[2223,6193,6194,6196,6198,6200,6202,6205],{"class":2225,"line":2341},[2223,6195,3721],{"class":2328},[2223,6197,3724],{"class":2334},[2223,6199,3727],{"class":2328},[2223,6201,3343],{"class":2334},[2223,6203,6204],{"class":2328},"] }  ",[2223,6206,6207],{"class":2312},"// Important!\n",[2223,6209,6210],{"class":2225,"line":336},[2223,6211,3691],{"class":2328},[116,6213,6215],{"id":6214},"_4-test-both-ltr-and-rtl","4. Test Both LTR and RTL",[12,6217,6218],{},"Always test your layouts in both directions:",[190,6220,6221,6231,6234,6237],{},[193,6222,6223,6224,6227,6228,4000],{},"Check margins and paddings (",[2220,6225,6226],{},"ms-4"," instead of ",[2220,6229,6230],{},"ml-4",[193,6232,6233],{},"Verify icon positions",[193,6235,6236],{},"Test form layouts",[193,6238,6239],{},"Check navigation menus",[116,6241,6243],{"id":6242},"_5-optimize-images","5. Optimize Images",[12,6245,6246],{},"Use Nuxt Image for automatic optimization:",[2214,6248,6250],{"className":3501,"code":6249,"language":3503,"meta":24,"style":24},"\u003CNuxtImg\n  :src=\"post.image\"\n  :alt=\"post.title\"\n  width=\"800\"\n  height=\"400\"\n  format=\"webp\"\n  loading=\"lazy\"\n/>\n",[2220,6251,6252,6259,6278,6296,6306,6316,6326,6336],{"__ignoreMap":24},[2223,6253,6254,6256],{"class":2225,"line":2226},[2223,6255,3113],{"class":3510},[2223,6257,6258],{"class":3513},"NuxtImg\n",[2223,6260,6261,6264,6266,6268,6270,6272,6274,6276],{"class":2225,"line":28},[2223,6262,6263],{"class":2328},"  :",[2223,6265,4035],{"class":3517},[2223,6267,3524],{"class":2328},[2223,6269,3944],{"class":3646},[2223,6271,3785],{"class":2334},[2223,6273,260],{"class":2328},[2223,6275,4046],{"class":2334},[2223,6277,3954],{"class":3646},[2223,6279,6280,6282,6284,6286,6288,6290,6292,6294],{"class":2225,"line":25},[2223,6281,6263],{"class":2328},[2223,6283,4057],{"class":3517},[2223,6285,3524],{"class":2328},[2223,6287,3944],{"class":3646},[2223,6289,3785],{"class":2334},[2223,6291,260],{"class":2328},[2223,6293,4068],{"class":2334},[2223,6295,3954],{"class":3646},[2223,6297,6298,6301,6303],{"class":2225,"line":2341},[2223,6299,6300],{"class":3517},"  width",[2223,6302,3524],{"class":2328},[2223,6304,6305],{"class":2233},"\"800\"\n",[2223,6307,6308,6311,6313],{"class":2225,"line":336},[2223,6309,6310],{"class":3517},"  height",[2223,6312,3524],{"class":2328},[2223,6314,6315],{"class":2233},"\"400\"\n",[2223,6317,6318,6321,6323],{"class":2225,"line":2357},[2223,6319,6320],{"class":3517},"  format",[2223,6322,3524],{"class":2328},[2223,6324,6325],{"class":2233},"\"webp\"\n",[2223,6327,6328,6331,6333],{"class":2225,"line":2363},[2223,6329,6330],{"class":3517},"  loading",[2223,6332,3524],{"class":2328},[2223,6334,6335],{"class":2233},"\"lazy\"\n",[2223,6337,6338],{"class":2225,"line":2074},[2223,6339,6340],{"class":2328},"/>\n",[16,6342,6344],{"id":6343},"common-issues-solutions","Common Issues & Solutions",[116,6346,6348],{"id":6347},"issue-locale-not-persisting","Issue: Locale not persisting",[12,6350,6351,6354],{},[397,6352,6353],{},"Solution",": Ensure cookie detection is enabled in i18n config:",[2214,6356,6358],{"className":2303,"code":6357,"language":2305,"meta":24,"style":24},"detectBrowserLanguage: {\n  useCookie: true,\n  cookieKey: \"i18n_redirected\",\n}\n",[2220,6359,6360,6367,6379,6391],{"__ignoreMap":24},[2223,6361,6362,6365],{"class":2225,"line":2226},[2223,6363,6364],{"class":5990},"detectBrowserLanguage",[2223,6366,5994],{"class":2328},[2223,6368,6369,6372,6374,6377],{"class":2225,"line":28},[2223,6370,6371],{"class":5990},"  useCookie",[2223,6373,3613],{"class":2328},[2223,6375,6376],{"class":2546},"true",[2223,6378,2347],{"class":2328},[2223,6380,6381,6384,6386,6389],{"class":2225,"line":25},[2223,6382,6383],{"class":5990},"  cookieKey",[2223,6385,3613],{"class":2328},[2223,6387,6388],{"class":2233},"\"i18n_redirected\"",[2223,6390,2347],{"class":2328},[2223,6392,6393],{"class":2225,"line":2341},[2223,6394,4487],{"class":2328},[116,6396,6398],{"id":6397},"issue-content-not-updating-when-switching-language","Issue: Content not updating when switching language",[12,6400,6401,6403,6404,6407,6408,2300],{},[397,6402,6353],{},": Use the ",[2220,6405,6406],{},"watch"," option in ",[2220,6409,6136],{},[2214,6411,6413],{"className":2303,"code":6412,"language":2305,"meta":24,"style":24},"{ watch: [locale] }\n",[2220,6414,6415],{"__ignoreMap":24},[2223,6416,6417,6420,6422,6425,6427],{"class":2225,"line":2226},[2223,6418,6419],{"class":2328},"{ ",[2223,6421,6406],{"class":5990},[2223,6423,6424],{"class":2328},": [",[2223,6426,3343],{"class":2334},[2223,6428,3732],{"class":2328},[116,6430,6432],{"id":6431},"issue-rtl-layout-breaking","Issue: RTL layout breaking",[12,6434,6435,6437,6438,6227,6441,2680],{},[397,6436,6353],{},": Use logical properties (",[2220,6439,6440],{},"start/end",[2220,6442,6443],{},"left/right",[2214,6445,6447],{"className":3501,"code":6446,"language":3503,"meta":24,"style":24},"\u003C!-- Bad -->\n\u003Cdiv class=\"ml-4\">\n\n\u003C!-- Good -->\n\u003Cdiv class=\"ms-4\">\n",[2220,6448,6449,6454,6469,6473,6478],{"__ignoreMap":24},[2223,6450,6451],{"class":2225,"line":2226},[2223,6452,6453],{"class":2312},"\u003C!-- Bad -->\n",[2223,6455,6456,6458,6460,6462,6464,6467],{"class":2225,"line":28},[2223,6457,3113],{"class":3510},[2223,6459,3917],{"class":3513},[2223,6461,3851],{"class":3517},[2223,6463,3524],{"class":2328},[2223,6465,6466],{"class":2233},"\"ml-4\"",[2223,6468,3530],{"class":3510},[2223,6470,6471],{"class":2225,"line":25},[2223,6472,2616],{"emptyLinePlaceholder":33},[2223,6474,6475],{"class":2225,"line":2341},[2223,6476,6477],{"class":2328},"\u003C!-- Good -->\n",[2223,6479,6480],{"class":2225,"line":336},[2223,6481,6482],{"class":2328},"\u003Cdiv class=\"ms-4\">\n",[16,6484,6486],{"id":6485},"deployment-considerations","Deployment Considerations",[116,6488,6490],{"id":6489},"_1-generate-static-routes","1. Generate Static Routes",[12,6492,6493,6494,6496],{},"Add this to ",[2220,6495,2299],{}," for static generation:",[2214,6498,6500],{"className":2303,"code":6499,"language":2305,"meta":24,"style":24},"nitro: {\n  prerender: {\n    routes: [\"/\", \"/ar\"],\n    crawlLinks: true,\n  },\n},\n",[2220,6501,6502,6509,6516,6534,6545,6549],{"__ignoreMap":24},[2223,6503,6504,6507],{"class":2225,"line":2226},[2223,6505,6506],{"class":5990},"nitro",[2223,6508,5994],{"class":2328},[2223,6510,6511,6514],{"class":2225,"line":28},[2223,6512,6513],{"class":5990},"  prerender",[2223,6515,5994],{"class":2328},[2223,6517,6518,6521,6523,6526,6528,6531],{"class":2225,"line":25},[2223,6519,6520],{"class":5990},"    routes",[2223,6522,6424],{"class":2328},[2223,6524,6525],{"class":2233},"\"/\"",[2223,6527,269],{"class":2328},[2223,6529,6530],{"class":2233},"\"/ar\"",[2223,6532,6533],{"class":2328},"],\n",[2223,6535,6536,6539,6541,6543],{"class":2225,"line":2341},[2223,6537,6538],{"class":5990},"    crawlLinks",[2223,6540,3613],{"class":2328},[2223,6542,6376],{"class":2546},[2223,6544,2347],{"class":2328},[2223,6546,6547],{"class":2225,"line":336},[2223,6548,2610],{"class":2328},[2223,6550,6551],{"class":2225,"line":2357},[2223,6552,6075],{"class":2328},[116,6554,6556],{"id":6555},"_2-configure-server-routes","2. Configure Server Routes",[12,6558,6559],{},"Make sure your server handles locale prefixes correctly.",[116,6561,6563],{"id":6562},"_3-add-sitemap","3. Add Sitemap",[12,6565,6566,6567,6570],{},"Install ",[2220,6568,6569],{},"@nuxtjs/sitemap"," and configure for multiple locales:",[2214,6572,6574],{"className":2303,"code":6573,"language":2305,"meta":24,"style":24},"sitemap: {\n  hostname: 'https://yourdomain.com',\n  i18n: true,\n}\n",[2220,6575,6576,6583,6595,6606],{"__ignoreMap":24},[2223,6577,6578,6581],{"class":2225,"line":2226},[2223,6579,6580],{"class":5990},"sitemap",[2223,6582,5994],{"class":2328},[2223,6584,6585,6588,6590,6593],{"class":2225,"line":28},[2223,6586,6587],{"class":5990},"  hostname",[2223,6589,3613],{"class":2328},[2223,6591,6592],{"class":2233},"'https://yourdomain.com'",[2223,6594,2347],{"class":2328},[2223,6596,6597,6600,6602,6604],{"class":2225,"line":25},[2223,6598,6599],{"class":5990},"  i18n",[2223,6601,3613],{"class":2328},[2223,6603,6376],{"class":2546},[2223,6605,2347],{"class":2328},[2223,6607,6608],{"class":2225,"line":2341},[2223,6609,4487],{"class":2328},[16,6611,301],{"id":300},[12,6613,6614],{},"Building a multilingual blog with Nuxt 3, Nuxt Content, and Nuxt i18n is straightforward once you understand the core concepts. The key is:",[675,6616,6617,6620,6623,6626,6629],{},[193,6618,6619],{},"Organize content by locale from the start",[193,6621,6622],{},"Use proper type definitions for better DX",[193,6624,6625],{},"Implement consistent composables for common tasks",[193,6627,6628],{},"Test thoroughly in all supported languages",[193,6630,6631],{},"Optimize for SEO with proper meta tags and hreflang",[12,6633,6634],{},"This approach scales well - you can add new languages by simply creating new content directories and updating your i18n config.",[12,6636,6637],{},"The blog you're reading right now uses this exact architecture, handling English and Arabic with full RTL support, localized categories, and optimized SEO. You can explore the source code and adapt it for your own projects.",[12,6639,6640],{},"Happy coding! 🚀",[6642,6643,6644],"style",{},"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 .svuFb, html code.shiki .svuFb{--shiki-light:#6F42C1;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}html pre.shiki code .sGDl4, html code.shiki .sGDl4{--shiki-light:#032F62;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .sNX3-, html code.shiki .sNX3-{--shiki-light:#005CC5;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}html pre.shiki code .s56mj, html code.shiki .s56mj{--shiki-light:#6A737D;--shiki-default:#6A9955;--shiki-dark:#6A9955}html pre.shiki code .sEkCa, html code.shiki .sEkCa{--shiki-light:#D73A49;--shiki-default:#C586C0;--shiki-dark:#C586C0}html pre.shiki code .sG4b4, html code.shiki .sG4b4{--shiki-light:#24292E;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .sZiGn, html code.shiki .sZiGn{--shiki-light:#24292E;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .s7v1m, html code.shiki .s7v1m{--shiki-light:#005CC5;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .s5uUr, html code.shiki .s5uUr{--shiki-light:#D73A49;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .sToQf, html code.shiki .sToQf{--shiki-light:#005CC5;--shiki-default:#4FC1FF;--shiki-dark:#4FC1FF}html pre.shiki code .s1p9p, html code.shiki .s1p9p{--shiki-light:#D73A49;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .su_XB, html code.shiki .su_XB{--shiki-light:#6F42C1;--shiki-default:#4EC9B0;--shiki-dark:#4EC9B0}html pre.shiki code .s9TRk, html code.shiki .s9TRk{--shiki-light:#E36209;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .s6-XD, html code.shiki .s6-XD{--shiki-light:#005CC5;--shiki-default:#4EC9B0;--shiki-dark:#4EC9B0}html pre.shiki code .se2iQ, html code.shiki .se2iQ{--shiki-light:#032F62;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .sffyN, html code.shiki .sffyN{--shiki-light:#24292E;--shiki-default:#808080;--shiki-dark:#808080}html pre.shiki code .ssFZ1, html code.shiki .ssFZ1{--shiki-light:#22863A;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .sFcZJ, html code.shiki .sFcZJ{--shiki-light:#6F42C1;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .s5T4v, html code.shiki .s5T4v{--shiki-light:#032F62;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .seC34, html code.shiki .seC34{--shiki-light:#005CC5;--shiki-default:#B5CEA8;--shiki-dark:#B5CEA8}html pre.shiki code .se0Tf, html code.shiki .se0Tf{--shiki-light:#005CC5;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .sqBZk, html code.shiki .sqBZk{--shiki-light:#005CC5;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .sGRYn, html code.shiki .sGRYn{--shiki-light:#6F42C1;--shiki-default:#C8C8C8;--shiki-dark:#C8C8C8}",{"title":24,"searchDepth":25,"depth":25,"links":6646},[6647,6648,6649,6650,6651,6652,6653,6654,6655,6656,6657,6658,6659,6666,6671,6676],{"id":2151,"depth":28,"text":2152},{"id":2184,"depth":28,"text":2185},{"id":2208,"depth":28,"text":2209},{"id":2292,"depth":28,"text":2293},{"id":2661,"depth":28,"text":2662},{"id":2848,"depth":28,"text":2849},{"id":3492,"depth":28,"text":3493},{"id":4224,"depth":28,"text":4225},{"id":4794,"depth":28,"text":4795},{"id":5109,"depth":28,"text":5110},{"id":5530,"depth":28,"text":5531},{"id":5787,"depth":28,"text":5788},{"id":6078,"depth":28,"text":6079,"children":6660},[6661,6662,6663,6664,6665],{"id":6082,"depth":25,"text":6083},{"id":6103,"depth":25,"text":6104},{"id":6129,"depth":25,"text":6130},{"id":6214,"depth":25,"text":6215},{"id":6242,"depth":25,"text":6243},{"id":6343,"depth":28,"text":6344,"children":6667},[6668,6669,6670],{"id":6347,"depth":25,"text":6348},{"id":6397,"depth":25,"text":6398},{"id":6431,"depth":25,"text":6432},{"id":6485,"depth":28,"text":6486,"children":6672},[6673,6674,6675],{"id":6489,"depth":25,"text":6490},{"id":6555,"depth":25,"text":6556},{"id":6562,"depth":25,"text":6563},{"id":300,"depth":28,"text":301},"Learn how to build a complete multilingual blog from scratch using Nuxt 3, Nuxt Content, and Nuxt i18n. This comprehensive tutorial covers everything from setup to deployment with real-world examples from this blog.","https://images.unsplash.com/photo-1523961131990-5ea7c61b2107?q=80&w=1200&auto=format&fit=crop",{"excerpt":6680},{"type":9,"value":6681},[6682],[12,6683,2148],{},"/building-multilingual-blogs-nuxt-content",{"title":2143,"description":6677},"building-multilingual-blogs-nuxt-content",[6688,6689,6690,6691,6692,3503,2305,6693],"nuxt","nuxt-content","nuxt-i18n","multilingual","tutorial","i18n","zd2QbuHRGBreJCajiQoo6YnCV8ziMyTXM_uyYrc4xlU",{"id":6696,"title":6697,"author":7,"body":6698,"category":373,"description":360,"extension":31,"image":6710,"isDraft":33,"isFeatured":34,"locale":35,"meta":6711,"navigation":33,"path":6716,"publishedAt":6717,"readingTime":82,"seo":6718,"stem":6719,"tags":6720,"updatedAt":6717,"__hash__":6722},"articles_en/building-robust-and-flexible-apis-a-comprehensive-arabic-guide.md","Building Robust and Flexible APIs: A Comprehensive Arabic Guide",{"type":9,"value":6699,"toc":6707},[6700,6703,6705],[12,6701,6702],{},"Building robust and flexible APIs is the foundation of any modern application.",[16,6704,19],{"id":18},[12,6706,22],{},{"title":24,"searchDepth":25,"depth":25,"links":6708},[6709],{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1555066931-4365d14bab8c?q=80&w=1200&auto=format&fit=crop",{"excerpt":6712},{"type":9,"value":6713},[6714],[12,6715,6702],{},"/building-robust-and-flexible-apis-a-comprehensive-arabic-guide","2025-03-18",{"title":6697,"description":360},"building-robust-and-flexible-apis-a-comprehensive-arabic-guide",[373,6721,375,1874],"api","QRrybnGmve-PoHuuTHS9z6-79_tj_TYvViDzrEEfHm4",{"id":6724,"title":6725,"author":7,"body":6726,"category":373,"description":360,"extension":31,"image":6710,"isDraft":33,"isFeatured":34,"locale":35,"meta":6738,"navigation":33,"path":6743,"publishedAt":6744,"readingTime":1432,"seo":6745,"stem":6746,"tags":6747,"updatedAt":6744,"__hash__":6748},"articles_en/building-secure-and-reliable-apis.md","Building Secure and Reliable APIs",{"type":9,"value":6727,"toc":6735},[6728,6731,6733],[12,6729,6730],{},"Building secure APIs protects your application and user data.",[16,6732,19],{"id":18},[12,6734,22],{},{"title":24,"searchDepth":25,"depth":25,"links":6736},[6737],{"id":18,"depth":28,"text":19},{"excerpt":6739},{"type":9,"value":6740},[6741],[12,6742,6730],{},"/building-secure-and-reliable-apis","2025-05-13",{"title":6725,"description":360},"building-secure-and-reliable-apis",[373,6721,1788,86],"1xtRuIZcYi351kIzhl9gE_3DIwdRhWXnKZSWwIGTx2M",{"id":6750,"title":6751,"author":7,"body":6752,"category":29,"description":30,"extension":31,"image":6764,"isDraft":33,"isFeatured":34,"locale":35,"meta":6765,"navigation":33,"path":6770,"publishedAt":6771,"readingTime":43,"seo":6772,"stem":6773,"tags":6774,"updatedAt":6771,"__hash__":6777},"articles_en/building-strong-business-networks.md","Building Strong Business Networks",{"type":9,"value":6753,"toc":6761},[6754,6757,6759],[12,6755,6756],{},"Strong networks open new doors for your startup's growth.",[16,6758,19],{"id":18},[12,6760,22],{},{"title":24,"searchDepth":25,"depth":25,"links":6762},[6763],{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1521737711867-e3b97375f902?q=80&w=1200&auto=format&fit=crop",{"excerpt":6766},{"type":9,"value":6767},[6768],[12,6769,6756],{},"/building-strong-business-networks","2025-07-08",{"title":6751,"description":30},"building-strong-business-networks",[29,47,6775,6776],"networking","relationships","r5y4UcxmUSpvrClPpb9X0t9DD00W0uKb7h4xD5lOYUc",{"id":6779,"title":6780,"author":7,"body":6781,"category":73,"description":74,"extension":31,"image":6799,"isDraft":33,"isFeatured":34,"locale":35,"meta":6800,"navigation":33,"path":6805,"publishedAt":6806,"readingTime":82,"seo":6807,"stem":6808,"tags":6809,"updatedAt":6806,"__hash__":6811},"articles_en/comprehensive-guide-to-market-testing-before-product-launch.md","Comprehensive Guide to Market Testing Before Product Launch",{"type":9,"value":6782,"toc":6795},[6783,6786,6788,6791,6793],[12,6784,6785],{},"Testing the market before launch saves you a lot of time, money, and effort.",[16,6787,61],{"id":60},[12,6789,6790],{},"Verifying the market before investing resources in full product development is a crucial step.",[16,6792,19],{"id":18},[12,6794,22],{},{"title":24,"searchDepth":25,"depth":25,"links":6796},[6797,6798],{"id":60,"depth":28,"text":61},{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1542744173-8e7e53415bb0?q=80&w=1200&auto=format&fit=crop",{"excerpt":6801},{"type":9,"value":6802},[6803],[12,6804,6785],{},"/comprehensive-guide-to-market-testing-before-product-launch","2025-01-21",{"title":6780,"description":74},"comprehensive-guide-to-market-testing-before-product-launch",[73,29,6810],"market-strategy","v9HAP7Sjtyd96nKjVWBSLrspNqTN57kF_wvJWyejclY",{"id":6813,"title":6814,"author":7,"body":6815,"category":373,"description":360,"extension":31,"image":6827,"isDraft":33,"isFeatured":34,"locale":35,"meta":6828,"navigation":33,"path":6833,"publishedAt":6834,"readingTime":369,"seo":6835,"stem":6836,"tags":6837,"updatedAt":6834,"__hash__":6841},"articles_en/comprehensive-introduction-to-cloud-development.md","Comprehensive Introduction to Cloud Development",{"type":9,"value":6816,"toc":6824},[6817,6820,6822],[12,6818,6819],{},"Cloud development has become the new standard for building modern applications.",[16,6821,19],{"id":18},[12,6823,22],{},{"title":24,"searchDepth":25,"depth":25,"links":6825},[6826],{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1451187580459-43490279c0fa?q=80&w=1200&auto=format&fit=crop",{"excerpt":6829},{"type":9,"value":6830},[6831],[12,6832,6819],{},"/comprehensive-introduction-to-cloud-development","2025-04-08",{"title":6814,"description":360},"comprehensive-introduction-to-cloud-development",[373,6838,1874,6839,6840],"cloud","aws","azure","jkb4Dt_N9Ud49wqV6VEelcL6S4184L8PlRSfpijw-5M",{"id":6843,"title":6844,"author":7,"body":6845,"category":373,"description":7432,"extension":31,"image":7433,"isDraft":34,"isFeatured":34,"locale":35,"meta":7434,"navigation":33,"path":7442,"publishedAt":7443,"readingTime":2357,"seo":7444,"stem":7435,"tags":7445,"updatedAt":2080,"__hash__":7446},"articles_en/css-units.md","CSS Units",{"type":9,"value":6846,"toc":7421},[6847,6850,6854,6857,6894,6929,6933,6936,6970,7004,7008,7011,7044,7077,7081,7084,7114,7146,7150,7153,7183,7187,7190,7225,7229,7236,7269,7273,7276,7304,7307,7316,7355,7359,7366,7369,7372,7375,7378,7381,7384,7387,7390,7392,7395,7398,7401,7415,7418],[12,6848,6849],{},"CSS (Cascading Style Sheets) is a language used to style and layout web pages. One of the most important concepts in CSS is the use of units to specify measurements such as length, width, and font size. In this article, we will discuss the different types of units available in CSS and how they are used to create a consistent and visually appealing design.",[16,6851,6853],{"id":6852},"absolute-units","Absolute Units",[12,6855,6856],{},"Absolute units are fixed units of measurement that do not change based on the user's device or screen size. The most common absolute units used in CSS are pixels (px), inches (in), centimeters (cm), and millimeters (mm).",[2214,6858,6860],{"className":5900,"code":6859,"language":5902,"meta":24,"style":24},"/* Setting the width of an element to 200 pixels */\ndiv {\n  width: 200px;\n}\n",[2220,6861,6862,6867,6874,6890],{"__ignoreMap":24},[2223,6863,6864],{"class":2225,"line":2226},[2223,6865,6866],{"class":2312},"/* Setting the width of an element to 200 pixels */\n",[2223,6868,6869,6872],{"class":2225,"line":28},[2223,6870,3917],{"class":6871},"se49E",[2223,6873,2379],{"class":2328},[2223,6875,6876,6879,6881,6884,6888],{"class":2225,"line":25},[2223,6877,6300],{"class":6878},"sps74",[2223,6880,3613],{"class":2328},[2223,6882,6883],{"class":4463},"200",[2223,6885,6887],{"class":6886},"sDy_c","px",[2223,6889,2889],{"class":2328},[2223,6891,6892],{"class":2225,"line":2341},[2223,6893,4487],{"class":2328},[2214,6895,6897],{"className":5900,"code":6896,"language":5902,"meta":24,"style":24},"/* Setting the font size of text to 12 points */\np {\n  font-size: 12pt;\n}\n",[2220,6898,6899,6904,6910,6925],{"__ignoreMap":24},[2223,6900,6901],{"class":2225,"line":2226},[2223,6902,6903],{"class":2312},"/* Setting the font size of text to 12 points */\n",[2223,6905,6906,6908],{"class":2225,"line":28},[2223,6907,12],{"class":6871},[2223,6909,2379],{"class":2328},[2223,6911,6912,6915,6917,6920,6923],{"class":2225,"line":25},[2223,6913,6914],{"class":6878},"  font-size",[2223,6916,3613],{"class":2328},[2223,6918,6919],{"class":4463},"12",[2223,6921,6922],{"class":6886},"pt",[2223,6924,2889],{"class":2328},[2223,6926,6927],{"class":2225,"line":2341},[2223,6928,4487],{"class":2328},[16,6930,6932],{"id":6931},"relative-units","Relative Units",[12,6934,6935],{},"Relative units are units of measurement that are relative to the user's device or screen size. The most common relative units used in CSS are em, rem, and vh/vw.",[2214,6937,6939],{"className":5900,"code":6938,"language":5902,"meta":24,"style":24},"/* Setting the font size of text to 1.5 times the parent element's font size */\np {\n  font-size: 1.5em;\n}\n",[2220,6940,6941,6946,6952,6966],{"__ignoreMap":24},[2223,6942,6943],{"class":2225,"line":2226},[2223,6944,6945],{"class":2312},"/* Setting the font size of text to 1.5 times the parent element's font size */\n",[2223,6947,6948,6950],{"class":2225,"line":28},[2223,6949,12],{"class":6871},[2223,6951,2379],{"class":2328},[2223,6953,6954,6956,6958,6961,6964],{"class":2225,"line":25},[2223,6955,6914],{"class":6878},[2223,6957,3613],{"class":2328},[2223,6959,6960],{"class":4463},"1.5",[2223,6962,6963],{"class":6886},"em",[2223,6965,2889],{"class":2328},[2223,6967,6968],{"class":2225,"line":2341},[2223,6969,4487],{"class":2328},[2214,6971,6973],{"className":5900,"code":6972,"language":5902,"meta":24,"style":24},"/* Setting the height of an element to 50% of the viewport height */\ndiv {\n  height: 50vh;\n}\n",[2220,6974,6975,6980,6986,7000],{"__ignoreMap":24},[2223,6976,6977],{"class":2225,"line":2226},[2223,6978,6979],{"class":2312},"/* Setting the height of an element to 50% of the viewport height */\n",[2223,6981,6982,6984],{"class":2225,"line":28},[2223,6983,3917],{"class":6871},[2223,6985,2379],{"class":2328},[2223,6987,6988,6990,6992,6995,6998],{"class":2225,"line":25},[2223,6989,6310],{"class":6878},[2223,6991,3613],{"class":2328},[2223,6993,6994],{"class":4463},"50",[2223,6996,6997],{"class":6886},"vh",[2223,6999,2889],{"class":2328},[2223,7001,7002],{"class":2225,"line":2341},[2223,7003,4487],{"class":2328},[16,7005,7007],{"id":7006},"viewport-units","Viewport Units",[12,7009,7010],{},"Viewport units are a special type of relative unit that is based on the size of the user's viewport (the visible area of the browser window). The most common viewport units used in CSS are vh (viewport height) and vw (viewport width).",[2214,7012,7014],{"className":5900,"code":7013,"language":5902,"meta":24,"style":24},"/* Setting the width of an element to 50% of the viewport width */\ndiv {\n  width: 50vw;\n}\n",[2220,7015,7016,7021,7027,7040],{"__ignoreMap":24},[2223,7017,7018],{"class":2225,"line":2226},[2223,7019,7020],{"class":2312},"/* Setting the width of an element to 50% of the viewport width */\n",[2223,7022,7023,7025],{"class":2225,"line":28},[2223,7024,3917],{"class":6871},[2223,7026,2379],{"class":2328},[2223,7028,7029,7031,7033,7035,7038],{"class":2225,"line":25},[2223,7030,6300],{"class":6878},[2223,7032,3613],{"class":2328},[2223,7034,6994],{"class":4463},[2223,7036,7037],{"class":6886},"vw",[2223,7039,2889],{"class":2328},[2223,7041,7042],{"class":2225,"line":2341},[2223,7043,4487],{"class":2328},[2214,7045,7047],{"className":5900,"code":7046,"language":5902,"meta":24,"style":24},"/* Setting the height of an element to 100vh */\ndiv {\n  height: 100vh;\n}\n",[2220,7048,7049,7054,7060,7073],{"__ignoreMap":24},[2223,7050,7051],{"class":2225,"line":2226},[2223,7052,7053],{"class":2312},"/* Setting the height of an element to 100vh */\n",[2223,7055,7056,7058],{"class":2225,"line":28},[2223,7057,3917],{"class":6871},[2223,7059,2379],{"class":2328},[2223,7061,7062,7064,7066,7069,7071],{"class":2225,"line":25},[2223,7063,6310],{"class":6878},[2223,7065,3613],{"class":2328},[2223,7067,7068],{"class":4463},"100",[2223,7070,6997],{"class":6886},[2223,7072,2889],{"class":2328},[2223,7074,7075],{"class":2225,"line":2341},[2223,7076,4487],{"class":2328},[16,7078,7080],{"id":7079},"pixels-px","Pixels (px)",[12,7082,7083],{},"Pixels are the most common unit of measurement used in web design. One pixel is equal to one dot on the user's screen. Pixels are a fixed unit of measurement and do not change based on the user's device or screen size.",[2214,7085,7086],{"className":5900,"code":6859,"language":5902,"meta":24,"style":24},[2220,7087,7088,7092,7098,7110],{"__ignoreMap":24},[2223,7089,7090],{"class":2225,"line":2226},[2223,7091,6866],{"class":2312},[2223,7093,7094,7096],{"class":2225,"line":28},[2223,7095,3917],{"class":6871},[2223,7097,2379],{"class":2328},[2223,7099,7100,7102,7104,7106,7108],{"class":2225,"line":25},[2223,7101,6300],{"class":6878},[2223,7103,3613],{"class":2328},[2223,7105,6883],{"class":4463},[2223,7107,6887],{"class":6886},[2223,7109,2889],{"class":2328},[2223,7111,7112],{"class":2225,"line":2341},[2223,7113,4487],{"class":2328},[2214,7115,7117],{"className":5900,"code":7116,"language":5902,"meta":24,"style":24},"/* Setting the font size of text to 12 pixels */\np {\n  font-size: 12px;\n}\n",[2220,7118,7119,7124,7130,7142],{"__ignoreMap":24},[2223,7120,7121],{"class":2225,"line":2226},[2223,7122,7123],{"class":2312},"/* Setting the font size of text to 12 pixels */\n",[2223,7125,7126,7128],{"class":2225,"line":28},[2223,7127,12],{"class":6871},[2223,7129,2379],{"class":2328},[2223,7131,7132,7134,7136,7138,7140],{"class":2225,"line":25},[2223,7133,6914],{"class":6878},[2223,7135,3613],{"class":2328},[2223,7137,6919],{"class":4463},[2223,7139,6887],{"class":6886},[2223,7141,2889],{"class":2328},[2223,7143,7144],{"class":2225,"line":2341},[2223,7145,4487],{"class":2328},[16,7147,7149],{"id":7148},"em-units","EM units",[12,7151,7152],{},"EM units are a relative unit of measurement that is based on the font size of the parent element. One em is equal to the font size of the parent element. For example, if the parent element's font size is 16 pixels, then 1 em is equal to 16 pixels.",[2214,7154,7155],{"className":5900,"code":6938,"language":5902,"meta":24,"style":24},[2220,7156,7157,7161,7167,7179],{"__ignoreMap":24},[2223,7158,7159],{"class":2225,"line":2226},[2223,7160,6945],{"class":2312},[2223,7162,7163,7165],{"class":2225,"line":28},[2223,7164,12],{"class":6871},[2223,7166,2379],{"class":2328},[2223,7168,7169,7171,7173,7175,7177],{"class":2225,"line":25},[2223,7170,6914],{"class":6878},[2223,7172,3613],{"class":2328},[2223,7174,6960],{"class":4463},[2223,7176,6963],{"class":6886},[2223,7178,2889],{"class":2328},[2223,7180,7181],{"class":2225,"line":2341},[2223,7182,4487],{"class":2328},[16,7184,7186],{"id":7185},"rem-units","REM units",[12,7188,7189],{},"REM units are similar to EM units but are based on the font size of the root element (usually the HTML element) instead of the parent element. This makes it easier to create a consistent design across a website or application.",[2214,7191,7193],{"className":5900,"code":7192,"language":5902,"meta":24,"style":24},"/* Setting the font size of text to 1.2 times the root element's font size */\np {\nfont-size: 1.2rem;\n}\n",[2220,7194,7195,7200,7206,7221],{"__ignoreMap":24},[2223,7196,7197],{"class":2225,"line":2226},[2223,7198,7199],{"class":2312},"/* Setting the font size of text to 1.2 times the root element's font size */\n",[2223,7201,7202,7204],{"class":2225,"line":28},[2223,7203,12],{"class":6871},[2223,7205,2379],{"class":2328},[2223,7207,7208,7211,7213,7216,7219],{"class":2225,"line":25},[2223,7209,7210],{"class":6878},"font-size",[2223,7212,3613],{"class":2328},[2223,7214,7215],{"class":4463},"1.2",[2223,7217,7218],{"class":6886},"rem",[2223,7220,2889],{"class":2328},[2223,7222,7223],{"class":2225,"line":2341},[2223,7224,4487],{"class":2328},[16,7226,7228],{"id":7227},"percent","Percent",[12,7230,7231,7232,7235],{},"Another common unit in CSS is percent (%). This unit is used to specify a measurement as a percentage of the parent element's width or height. For example, if you want an element to take up 50% of the width of its parent element, you would use ",[2220,7233,7234],{},"width: 50%",". It's important to note that using percent for height may not always work as expected, as it depends on the parent element having an explicitly defined height.",[2214,7237,7239],{"className":5900,"code":7238,"language":5902,"meta":24,"style":24},"/* Setting the width element to 1/2 of their parent */\ndiv {\n  width: 50%;\n}\n",[2220,7240,7241,7246,7252,7265],{"__ignoreMap":24},[2223,7242,7243],{"class":2225,"line":2226},[2223,7244,7245],{"class":2312},"/* Setting the width element to 1/2 of their parent */\n",[2223,7247,7248,7250],{"class":2225,"line":28},[2223,7249,3917],{"class":6871},[2223,7251,2379],{"class":2328},[2223,7253,7254,7256,7258,7260,7263],{"class":2225,"line":25},[2223,7255,6300],{"class":6878},[2223,7257,3613],{"class":2328},[2223,7259,6994],{"class":4463},[2223,7261,7262],{"class":6886},"%",[2223,7264,2889],{"class":2328},[2223,7266,7267],{"class":2225,"line":2341},[2223,7268,4487],{"class":2328},[16,7270,7272],{"id":7271},"ch","Ch",[12,7274,7275],{},"The ch unit is a relatively new CSS unit that is used to set the font size relative to the width of the character \"0\" in the current font. This unit is particularly useful when working with monospace fonts, as it ensures that all characters in a monospace font are the same width.",[2214,7277,7279],{"className":5900,"code":7278,"language":5902,"meta":24,"style":24},"p {\n  font-size: 2ch;\n}\n",[2220,7280,7281,7287,7300],{"__ignoreMap":24},[2223,7282,7283,7285],{"class":2225,"line":2226},[2223,7284,12],{"class":6871},[2223,7286,2379],{"class":2328},[2223,7288,7289,7291,7293,7296,7298],{"class":2225,"line":28},[2223,7290,6914],{"class":6878},[2223,7292,3613],{"class":2328},[2223,7294,7295],{"class":4463},"2",[2223,7297,7271],{"class":6886},[2223,7299,2889],{"class":2328},[2223,7301,7302],{"class":2225,"line":25},[2223,7303,4487],{"class":2328},[12,7305,7306],{},"⚠️",[12,7308,7309,7310,7312,7313,7315],{},"It's important to note that the ch unit is not widely supported by all browsers yet, so it's recommended to use it in combination with other units such as ",[2220,7311,6963],{}," or ",[2220,7314,7218],{}," as a fallback.",[2214,7317,7319],{"className":5900,"code":7318,"language":5902,"meta":24,"style":24},"p {\n  font-size: 2ch;\n  font-size: 2rem;\n}\n",[2220,7320,7321,7327,7339,7351],{"__ignoreMap":24},[2223,7322,7323,7325],{"class":2225,"line":2226},[2223,7324,12],{"class":6871},[2223,7326,2379],{"class":2328},[2223,7328,7329,7331,7333,7335,7337],{"class":2225,"line":28},[2223,7330,6914],{"class":6878},[2223,7332,3613],{"class":2328},[2223,7334,7295],{"class":4463},[2223,7336,7271],{"class":6886},[2223,7338,2889],{"class":2328},[2223,7340,7341,7343,7345,7347,7349],{"class":2225,"line":25},[2223,7342,6914],{"class":6878},[2223,7344,3613],{"class":2328},[2223,7346,7295],{"class":4463},[2223,7348,7218],{"class":6886},[2223,7350,2889],{"class":2328},[2223,7352,7353],{"class":2225,"line":2341},[2223,7354,4487],{"class":2328},[16,7356,7358],{"id":7357},"traditional-units","Traditional Units",[12,7360,7361,7362,7365],{},"We can also use more traditional units on web pages such as ",[397,7363,7364],{},"centimeters",". Note, I would not recommend using these for web designs, but rather perhaps for prints or non-web design-related CSS. That is because browsers and devices determine the definitions of these based on their own definitions of pixel density, which makes things very complicated.",[12,7367,7368],{},"Unit",[12,7370,7371],{},"Description",[12,7373,7374],{},"cm",[12,7376,7377],{},"Centimeter - a traditional unit of measurement based on physical measurements. Not recommended for web design as it is not responsive.",[12,7379,7380],{},"mm",[12,7382,7383],{},"Millimeter - a traditional unit of measurement based on physical measurements. Not recommended for web design as it is not responsive.",[12,7385,7386],{},"in",[12,7388,7389],{},"Inch - a traditional unit of measurement based on physical measurements. Not recommended for web design as it is not responsive.",[12,7391,6922],{},[12,7393,7394],{},"Point - a traditional unit of measurement used in print design. Not recommended for web design as it is not responsive.",[12,7396,7397],{},"pc",[12,7399,7400],{},"Pica - a traditional unit of measurement used in print design. Not recommended for web design as it is not responsive.",[12,7402,7403,7404,269,7406,269,7408,269,7410,291,7412,7414],{},"Please note that these units are not widely used in web design as they are based on physical measurements and do not take into account the variations in pixel density across different devices and screens. It is recommended to use relative units such as ",[2220,7405,6963],{},[2220,7407,7218],{},[2220,7409,6997],{},[2220,7411,7037],{},[2220,7413,7262],{}," for web design as they are based on the size of the viewport and adapt to different screen sizes.",[12,7416,7417],{},"In conclusion, understanding and utilizing the different types of units available in CSS is essential for creating a visually appealing and responsive design. By using a combination of absolute and relative units, and utilizing media queries, you can ensure that your website or application looks great on any device and screen size. Additionally, using REM units for font size allows for greater consistency and ease of maintenance across your entire website or application. It is always important to test your design on different devices and screen sizes to ensure that it looks great and functions well for all users.",[6642,7419,7420],{},"html pre.shiki code .s56mj, html code.shiki .s56mj{--shiki-light:#6A737D;--shiki-default:#6A9955;--shiki-dark:#6A9955}html pre.shiki code .se49E, html code.shiki .se49E{--shiki-light:#22863A;--shiki-default:#D7BA7D;--shiki-dark:#D7BA7D}html pre.shiki code .sG4b4, html code.shiki .sG4b4{--shiki-light:#24292E;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .sps74, html code.shiki .sps74{--shiki-light:#005CC5;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .seC34, html code.shiki .seC34{--shiki-light:#005CC5;--shiki-default:#B5CEA8;--shiki-dark:#B5CEA8}html pre.shiki code .sDy_c, html code.shiki .sDy_c{--shiki-light:#D73A49;--shiki-default:#B5CEA8;--shiki-dark:#B5CEA8}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":24,"searchDepth":25,"depth":25,"links":7422},[7423,7424,7425,7426,7427,7428,7429,7430,7431],{"id":6852,"depth":28,"text":6853},{"id":6931,"depth":28,"text":6932},{"id":7006,"depth":28,"text":7007},{"id":7079,"depth":28,"text":7080},{"id":7148,"depth":28,"text":7149},{"id":7185,"depth":28,"text":7186},{"id":7227,"depth":28,"text":7228},{"id":7271,"depth":28,"text":7272},{"id":7357,"depth":28,"text":7358},"CSS (Cascading Style Sheets) is a language used to style and layout web pages. One of the most important concepts in CSS is the use of units to specify measurements such as length, width, and font size. In this article.","https://images.unsplash.com/photo-1505685296765-3a2736de412f?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDV8fGNzc3xlbnwwfHx8fDE2NzQxMzg3ODQ&ixlib=rb-4.0.3&q=80&w=2000",{"slug":7435,"excerpt":7436},"css-units",{"type":9,"value":7437},[7438,7440],[12,7439,6849],{},[16,7441,6853],{"id":6852},"/css-units","2023-01-21T14:39:04.000Z",{"title":6844,"description":7432},[340,342],"BHp7PFzndEcPygt5RwvHuxPxwXiaSjhSyPmUn5FQ1DQ",{"id":7448,"title":7449,"author":7,"body":7450,"category":1829,"description":7477,"extension":31,"image":7478,"isDraft":33,"isFeatured":34,"locale":35,"meta":7479,"navigation":33,"path":7484,"publishedAt":1838,"readingTime":1839,"seo":7485,"stem":7486,"tags":7487,"updatedAt":1838,"__hash__":7490},"articles_en/customer-learning-platform-b2b-case-study.md","Customer Learning Platform: B2B Product Education",{"type":9,"value":7451,"toc":7471},[7452,7455,7457,7459,7461,7463,7465,7467,7469],[12,7453,7454],{},"Exploring the development of a B2B learning platform designed to help companies educate their customers about their products.",[16,7456,1801],{"id":1800},[12,7458,1804],{},[16,7460,1808],{"id":1807},[12,7462,1804],{},[16,7464,1814],{"id":1813},[12,7466,1804],{},[16,7468,1820],{"id":1819},[12,7470,1804],{},{"title":24,"searchDepth":25,"depth":25,"links":7472},[7473,7474,7475,7476],{"id":1800,"depth":28,"text":1801},{"id":1807,"depth":28,"text":1808},{"id":1813,"depth":28,"text":1814},{"id":1819,"depth":28,"text":1820},"Case study of a B2B customer learning platform enabling companies to create courses about their products for customer education.","https://images.unsplash.com/photo-1552664730-d307ca884978?q=80&w=1200&auto=format&fit=crop",{"excerpt":7480},{"type":9,"value":7481},[7482],[12,7483,7454],{},"/customer-learning-platform-b2b-case-study",{"title":7449,"description":7477},"customer-learning-platform-b2b-case-study",[1829,73,7488,1845,7489],"b2b","customer-success","FfoBDGW2U5iCp40g1ZD7xQRvGIjT_Src-tWj6gzHcZ8",{"id":7492,"title":7493,"author":7,"body":7494,"category":73,"description":74,"extension":31,"image":7506,"isDraft":33,"isFeatured":34,"locale":35,"meta":7507,"navigation":33,"path":7512,"publishedAt":7513,"readingTime":1784,"seo":7514,"stem":7515,"tags":7516,"updatedAt":7513,"__hash__":7519},"articles_en/designing-user-experience-for-arab-products.md","Designing User Experience for Arab Products",{"type":9,"value":7495,"toc":7503},[7496,7499,7501],[12,7497,7498],{},"Designing user experience for Arab products requires understanding cultural and linguistic particularities.",[16,7500,19],{"id":18},[12,7502,22],{},{"title":24,"searchDepth":25,"depth":25,"links":7504},[7505],{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1561070791-2526d30994b5?q=80&w=1200&auto=format&fit=crop",{"excerpt":7508},{"type":9,"value":7509},[7510],[12,7511,7498],{},"/designing-user-experience-for-arab-products","2025-02-04",{"title":7493,"description":74},"designing-user-experience-for-arab-products",[73,7517,7518,340],"user-experience","design","8eC8yo9Kjy_DK1YX6N85c0ETgqE4H-M06ugq5Fpsajc",{"id":7521,"title":7522,"author":7,"body":7523,"category":373,"description":10320,"extension":31,"image":10321,"isDraft":34,"isFeatured":33,"locale":35,"meta":10322,"navigation":33,"path":10329,"publishedAt":10330,"readingTime":1839,"seo":10331,"stem":10332,"tags":10333,"updatedAt":10339,"__hash__":10340},"articles_en/developer-productivity.md","The Ultimate Developer Productivity Guide for 2025: Tools, Techniques, and Habits",{"type":9,"value":7524,"toc":10268},[7525,7528,7531,7535,7539,7544,7547,7587,7592,7598,7602,7608,7619,7625,7639,7644,7661,7666,7677,7681,7686,7853,7859,7968,7972,7977,7997,8002,8022,8026,8031,8159,8164,8202,8206,8212,8223,8229,8240,8244,8248,8254,8258,8264,8268,8271,8277,8282,8288,8292,8298,8302,8306,8311,8322,8327,8338,8342,8362,8366,8371,8391,8396,8453,8458,8464,8468,8471,8503,8508,8522,8526,8530,8535,8739,8744,8841,8845,9008,9012,9183,9187,9191,9194,9214,9218,9223,9255,9260,9286,9290,9295,9361,9365,9369,9374,9391,9396,9413,9417,9422,9439,9444,9476,9480,9485,9517,9522,9548,9552,9556,9561,9675,9680,9732,9736,9741,9747,9752,9823,9827,9832,9846,9851,9865,9869,9889,9893,9897,9902,10017,10021,10026,10040,10045,10059,10063,10067,10104,10108,10141,10145,10178,10182,10215,10217,10220,10225,10257,10260,10265],[12,7526,7527],{},"In the fast-paced world of software development, productivity isn't just about working longer hours—it's about working smarter with the right tools, techniques, and habits. As developers in 2025, we have access to AI-powered assistants, advanced automation tools, and proven methodologies that can transform our workflow.",[12,7529,7530],{},"This comprehensive guide covers everything you need to know to maximize your productivity: from modern development tools to deep work techniques, from AI assistants to health habits. Whether you're a junior developer or a seasoned engineer, you'll find actionable strategies that work.",[16,7532,7534],{"id":7533},"the-modern-developer-toolkit-2025","The Modern Developer Toolkit (2025)",[116,7536,7538],{"id":7537},"essential-development-tools","Essential Development Tools",[12,7540,7541],{},[397,7542,7543],{},"Code Editors & IDEs",[12,7545,7546],{},"The right editor can make a massive difference in your daily workflow:",[190,7548,7549,7575,7581],{},[193,7550,7551,7554,7555],{},[397,7552,7553],{},"Visual Studio Code"," (Free) - Still the king in 2025. Essential extensions:",[190,7556,7557,7560,7563,7566,7569,7572],{},[193,7558,7559],{},"GitHub Copilot ($10/month) - AI pair programmer",[193,7561,7562],{},"Prettier - Code formatting",[193,7564,7565],{},"ESLint - Linting and code quality",[193,7567,7568],{},"GitLens - Enhanced Git visualization",[193,7570,7571],{},"Thunder Client - REST API testing",[193,7573,7574],{},"Error Lens - Inline error highlighting",[193,7576,7577,7580],{},[397,7578,7579],{},"Cursor"," ($20/month) - VS Code fork with integrated AI chat and codebase understanding. Best for AI-first development.",[193,7582,7583,7586],{},[397,7584,7585],{},"JetBrains IDEs"," ($149/year) - IntelliJ IDEA, WebStorm, PyCharm. Superior refactoring tools and debugging capabilities.",[12,7588,7589],{},[397,7590,7591],{},"Key Shortcuts to Master (VS Code)",[2214,7593,7596],{"className":7594,"code":7595,"language":2671},[2669],"Ctrl+P              Quick file open\nCtrl+Shift+F        Search across files\nCtrl+D              Select next occurrence\nAlt+Up/Down         Move line up/down\nCtrl+/              Toggle comment\nCtrl+`              Toggle terminal\nCtrl+Shift+L        Select all occurrences\nF2                  Rename symbol\nCtrl+Space          Trigger suggestions\n",[2220,7597,7595],{"__ignoreMap":24},[116,7599,7601],{"id":7600},"ai-powered-development-tools","AI-Powered Development Tools",[12,7603,7604,7607],{},[397,7605,7606],{},"GitHub Copilot"," ($10/month or $100/year)",[190,7609,7610,7613,7616],{},[193,7611,7612],{},"Best for: Code completion, boilerplate generation, documentation",[193,7614,7615],{},"Works in all major IDEs",[193,7617,7618],{},"Trained on billions of lines of public code",[12,7620,7621,7624],{},[397,7622,7623],{},"ChatGPT Plus"," ($20/month)",[190,7626,7627,7630,7633,7636],{},[193,7628,7629],{},"GPT-4o for complex problem-solving",[193,7631,7632],{},"Code reviews and optimization suggestions",[193,7634,7635],{},"Architecture planning",[193,7637,7638],{},"Learning new concepts",[12,7640,7641,7624],{},[397,7642,7643],{},"Cursor IDE",[190,7645,7646,7649,7655,7658],{},[193,7647,7648],{},"AI that understands your entire codebase",[193,7650,7651,7654],{},[2220,7652,7653],{},"Ctrl+K"," to edit code with AI",[193,7656,7657],{},"Chat with your project context",[193,7659,7660],{},"Best for refactoring and large changes",[12,7662,7663,7624],{},[397,7664,7665],{},"Claude Pro",[190,7667,7668,7671,7674],{},[193,7669,7670],{},"200K token context window (entire codebases)",[193,7672,7673],{},"Excellent for code analysis and documentation",[193,7675,7676],{},"Better reasoning for complex logic",[116,7678,7680],{"id":7679},"version-control-collaboration","Version Control & Collaboration",[12,7682,7683],{},[397,7684,7685],{},"Git Power User Commands",[2214,7687,7689],{"className":2216,"code":7688,"language":2218,"meta":24,"style":24},"# Interactive staging\ngit add -p\n\n# Beautiful commit history\ngit log --oneline --graph --all --decorate\n\n# Squash last 3 commits\ngit rebase -i HEAD~3\n\n# Create and switch to new branch\ngit switch -c feature-name\n\n# Stash with message\ngit stash push -m \"WIP: working on auth\"\n\n# Cherry-pick a commit\ngit cherry-pick \u003Ccommit-hash>\n\n# Amend last commit without editing message\ngit commit --amend --no-edit\n",[2220,7690,7691,7696,7707,7711,7716,7735,7739,7744,7757,7761,7766,7779,7783,7788,7804,7808,7813,7831,7835,7840],{"__ignoreMap":24},[2223,7692,7693],{"class":2225,"line":2226},[2223,7694,7695],{"class":2312},"# Interactive staging\n",[2223,7697,7698,7701,7704],{"class":2225,"line":28},[2223,7699,7700],{"class":2229},"git",[2223,7702,7703],{"class":2233}," add",[2223,7705,7706],{"class":2546}," -p\n",[2223,7708,7709],{"class":2225,"line":25},[2223,7710,2616],{"emptyLinePlaceholder":33},[2223,7712,7713],{"class":2225,"line":2341},[2223,7714,7715],{"class":2312},"# Beautiful commit history\n",[2223,7717,7718,7720,7723,7726,7729,7732],{"class":2225,"line":336},[2223,7719,7700],{"class":2229},[2223,7721,7722],{"class":2233}," log",[2223,7724,7725],{"class":2546}," --oneline",[2223,7727,7728],{"class":2546}," --graph",[2223,7730,7731],{"class":2546}," --all",[2223,7733,7734],{"class":2546}," --decorate\n",[2223,7736,7737],{"class":2225,"line":2357},[2223,7738,2616],{"emptyLinePlaceholder":33},[2223,7740,7741],{"class":2225,"line":2363},[2223,7742,7743],{"class":2312},"# Squash last 3 commits\n",[2223,7745,7746,7748,7751,7754],{"class":2225,"line":2074},[2223,7747,7700],{"class":2229},[2223,7749,7750],{"class":2233}," rebase",[2223,7752,7753],{"class":2546}," -i",[2223,7755,7756],{"class":2233}," HEAD~3\n",[2223,7758,7759],{"class":2225,"line":43},[2223,7760,2616],{"emptyLinePlaceholder":33},[2223,7762,7763],{"class":2225,"line":2382},[2223,7764,7765],{"class":2312},"# Create and switch to new branch\n",[2223,7767,7768,7770,7773,7776],{"class":2225,"line":1784},[2223,7769,7700],{"class":2229},[2223,7771,7772],{"class":2233}," switch",[2223,7774,7775],{"class":2546}," -c",[2223,7777,7778],{"class":2233}," feature-name\n",[2223,7780,7781],{"class":2225,"line":82},[2223,7782,2616],{"emptyLinePlaceholder":33},[2223,7784,7785],{"class":2225,"line":1432},[2223,7786,7787],{"class":2312},"# Stash with message\n",[2223,7789,7790,7792,7795,7798,7801],{"class":2225,"line":369},[2223,7791,7700],{"class":2229},[2223,7793,7794],{"class":2233}," stash",[2223,7796,7797],{"class":2233}," push",[2223,7799,7800],{"class":2546}," -m",[2223,7802,7803],{"class":2233}," \"WIP: working on auth\"\n",[2223,7805,7806],{"class":2225,"line":2425},[2223,7807,2616],{"emptyLinePlaceholder":33},[2223,7809,7810],{"class":2225,"line":1750},[2223,7811,7812],{"class":2312},"# Cherry-pick a commit\n",[2223,7814,7815,7817,7820,7823,7826,7829],{"class":2225,"line":2105},[2223,7816,7700],{"class":2229},[2223,7818,7819],{"class":2233}," cherry-pick",[2223,7821,7822],{"class":2908}," \u003C",[2223,7824,7825],{"class":2233},"commit-has",[2223,7827,7828],{"class":2328},"h",[2223,7830,3530],{"class":2908},[2223,7832,7833],{"class":2225,"line":2449},[2223,7834,2616],{"emptyLinePlaceholder":33},[2223,7836,7837],{"class":2225,"line":2454},[2223,7838,7839],{"class":2312},"# Amend last commit without editing message\n",[2223,7841,7842,7844,7847,7850],{"class":2225,"line":1839},[2223,7843,7700],{"class":2229},[2223,7845,7846],{"class":2233}," commit",[2223,7848,7849],{"class":2546}," --amend",[2223,7851,7852],{"class":2546}," --no-edit\n",[12,7854,7855,7858],{},[397,7856,7857],{},"GitHub CLI"," (Free)",[2214,7860,7862],{"className":2216,"code":7861,"language":2218,"meta":24,"style":24},"# Create PR from terminal\ngh pr create --fill\n\n# View PR status\ngh pr status\n\n# Checkout a PR\ngh pr checkout 123\n\n# Create issue\ngh issue create --title \"Bug: Login fails\"\n\n# Open repo in browser\ngh repo view --web\n",[2220,7863,7864,7869,7883,7887,7892,7901,7905,7910,7922,7926,7931,7946,7950,7955],{"__ignoreMap":24},[2223,7865,7866],{"class":2225,"line":2226},[2223,7867,7868],{"class":2312},"# Create PR from terminal\n",[2223,7870,7871,7874,7877,7880],{"class":2225,"line":28},[2223,7872,7873],{"class":2229},"gh",[2223,7875,7876],{"class":2233}," pr",[2223,7878,7879],{"class":2233}," create",[2223,7881,7882],{"class":2546}," --fill\n",[2223,7884,7885],{"class":2225,"line":25},[2223,7886,2616],{"emptyLinePlaceholder":33},[2223,7888,7889],{"class":2225,"line":2341},[2223,7890,7891],{"class":2312},"# View PR status\n",[2223,7893,7894,7896,7898],{"class":2225,"line":336},[2223,7895,7873],{"class":2229},[2223,7897,7876],{"class":2233},[2223,7899,7900],{"class":2233}," status\n",[2223,7902,7903],{"class":2225,"line":2357},[2223,7904,2616],{"emptyLinePlaceholder":33},[2223,7906,7907],{"class":2225,"line":2363},[2223,7908,7909],{"class":2312},"# Checkout a PR\n",[2223,7911,7912,7914,7916,7919],{"class":2225,"line":2074},[2223,7913,7873],{"class":2229},[2223,7915,7876],{"class":2233},[2223,7917,7918],{"class":2233}," checkout",[2223,7920,7921],{"class":4463}," 123\n",[2223,7923,7924],{"class":2225,"line":43},[2223,7925,2616],{"emptyLinePlaceholder":33},[2223,7927,7928],{"class":2225,"line":2382},[2223,7929,7930],{"class":2312},"# Create issue\n",[2223,7932,7933,7935,7938,7940,7943],{"class":2225,"line":1784},[2223,7934,7873],{"class":2229},[2223,7936,7937],{"class":2233}," issue",[2223,7939,7879],{"class":2233},[2223,7941,7942],{"class":2546}," --title",[2223,7944,7945],{"class":2233}," \"Bug: Login fails\"\n",[2223,7947,7948],{"class":2225,"line":82},[2223,7949,2616],{"emptyLinePlaceholder":33},[2223,7951,7952],{"class":2225,"line":1432},[2223,7953,7954],{"class":2312},"# Open repo in browser\n",[2223,7956,7957,7959,7962,7965],{"class":2225,"line":369},[2223,7958,7873],{"class":2229},[2223,7960,7961],{"class":2233}," repo",[2223,7963,7964],{"class":2233}," view",[2223,7966,7967],{"class":2546}," --web\n",[116,7969,7971],{"id":7970},"task-project-management","Task & Project Management",[12,7973,7974],{},[397,7975,7976],{},"For Personal Use:",[190,7978,7979,7985,7991],{},[193,7980,7981,7984],{},[397,7982,7983],{},"Notion"," (Free/Paid) - All-in-one workspace for docs, tasks, and databases",[193,7986,7987,7990],{},[397,7988,7989],{},"Obsidian"," (Free) - Markdown-based knowledge management",[193,7992,7993,7996],{},[397,7994,7995],{},"Linear"," ($8/month per user) - Modern issue tracking",[12,7998,7999],{},[397,8000,8001],{},"For Teams:",[190,8003,8004,8010,8016],{},[193,8005,8006,8009],{},[397,8007,8008],{},"Jira"," - Enterprise project management",[193,8011,8012,8015],{},[397,8013,8014],{},"ClickUp"," - Flexible workflow management",[193,8017,8018,8021],{},[397,8019,8020],{},"Monday.dev"," - Visual project boards",[116,8023,8025],{"id":8024},"terminal-cli-enhancements","Terminal & CLI Enhancements",[12,8027,8028],{},[397,8029,8030],{},"Modern Shell Setup",[2214,8032,8034],{"className":2216,"code":8033,"language":2218,"meta":24,"style":24},"# Starship - Beautiful terminal prompt\n# Shows git status, Node version, etc.\ncurl -sS https://starship.rs/install.sh | sh\n\n# zsh with Oh My Zsh\nsh -c \"$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)\"\n\n# Useful aliases\nalias gs='git status'\nalias gp='git push'\nalias gc='git commit -m'\nalias nrd='npm run dev'\nalias cls='clear'\n",[2220,8035,8036,8041,8046,8062,8066,8071,8089,8093,8098,8111,8123,8135,8147],{"__ignoreMap":24},[2223,8037,8038],{"class":2225,"line":2226},[2223,8039,8040],{"class":2312},"# Starship - Beautiful terminal prompt\n",[2223,8042,8043],{"class":2225,"line":28},[2223,8044,8045],{"class":2312},"# Shows git status, Node version, etc.\n",[2223,8047,8048,8051,8054,8057,8059],{"class":2225,"line":25},[2223,8049,8050],{"class":2229},"curl",[2223,8052,8053],{"class":2546}," -sS",[2223,8055,8056],{"class":2233}," https://starship.rs/install.sh",[2223,8058,5229],{"class":2908},[2223,8060,8061],{"class":2229}," sh\n",[2223,8063,8064],{"class":2225,"line":2341},[2223,8065,2616],{"emptyLinePlaceholder":33},[2223,8067,8068],{"class":2225,"line":336},[2223,8069,8070],{"class":2312},"# zsh with Oh My Zsh\n",[2223,8072,8073,8076,8078,8081,8083,8086],{"class":2225,"line":2357},[2223,8074,8075],{"class":2229},"sh",[2223,8077,7775],{"class":2546},[2223,8079,8080],{"class":2233}," \"$(",[2223,8082,8050],{"class":2229},[2223,8084,8085],{"class":2546}," -fsSL",[2223,8087,8088],{"class":2233}," https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)\"\n",[2223,8090,8091],{"class":2225,"line":2363},[2223,8092,2616],{"emptyLinePlaceholder":33},[2223,8094,8095],{"class":2225,"line":2074},[2223,8096,8097],{"class":2312},"# Useful aliases\n",[2223,8099,8100,8103,8106,8108],{"class":2225,"line":43},[2223,8101,8102],{"class":2900},"alias",[2223,8104,8105],{"class":2334}," gs",[2223,8107,3524],{"class":2908},[2223,8109,8110],{"class":2233},"'git status'\n",[2223,8112,8113,8115,8118,8120],{"class":2225,"line":2382},[2223,8114,8102],{"class":2900},[2223,8116,8117],{"class":2334}," gp",[2223,8119,3524],{"class":2908},[2223,8121,8122],{"class":2233},"'git push'\n",[2223,8124,8125,8127,8130,8132],{"class":2225,"line":1784},[2223,8126,8102],{"class":2900},[2223,8128,8129],{"class":2334}," gc",[2223,8131,3524],{"class":2908},[2223,8133,8134],{"class":2233},"'git commit -m'\n",[2223,8136,8137,8139,8142,8144],{"class":2225,"line":82},[2223,8138,8102],{"class":2900},[2223,8140,8141],{"class":2334}," nrd",[2223,8143,3524],{"class":2908},[2223,8145,8146],{"class":2233},"'npm run dev'\n",[2223,8148,8149,8151,8154,8156],{"class":2225,"line":1432},[2223,8150,8102],{"class":2900},[2223,8152,8153],{"class":2334}," cls",[2223,8155,3524],{"class":2908},[2223,8157,8158],{"class":2233},"'clear'\n",[12,8160,8161],{},[397,8162,8163],{},"Essential CLI Tools:",[190,8165,8166,8172,8178,8188,8197],{},[193,8167,8168,8171],{},[397,8169,8170],{},"fzf"," - Fuzzy finder for files and command history",[193,8173,8174,8177],{},[397,8175,8176],{},"ripgrep (rg)"," - Faster than grep, searches files recursively",[193,8179,8180,8183,8184,8187],{},[397,8181,8182],{},"bat"," - Better ",[2220,8185,8186],{},"cat"," with syntax highlighting",[193,8189,8190,8193,8194],{},[397,8191,8192],{},"exa/eza"," - Modern replacement for ",[2220,8195,8196],{},"ls",[193,8198,8199,8201],{},[397,8200,95],{}," - Simplified man pages with examples",[116,8203,8205],{"id":8204},"time-tracking-analytics","Time Tracking & Analytics",[12,8207,8208,8211],{},[397,8209,8210],{},"WakaTime"," (Free/Paid)",[190,8213,8214,8217,8220],{},[193,8215,8216],{},"Automatic time tracking in your editor",[193,8218,8219],{},"Detailed stats on languages, projects, files",[193,8221,8222],{},"Helps identify where your time goes",[12,8224,8225,8228],{},[397,8226,8227],{},"RescueTime"," ($12/month)",[190,8230,8231,8234,8237],{},[193,8232,8233],{},"Tracks all computer activity",[193,8235,8236],{},"Shows productivity patterns",[193,8238,8239],{},"Blocks distracting websites",[16,8241,8243],{"id":8242},"planning-task-management-techniques","Planning & Task Management Techniques",[116,8245,8247],{"id":8246},"the-morning-planning-ritual-15-minutes","The Morning Planning Ritual (15 minutes)",[2214,8249,8252],{"className":8250,"code":8251,"language":2671},[2669],"1. Review yesterday's progress (3 min)\n   - What got done?\n   - What got blocked?\n\n2. Check priorities (5 min)\n   - Urgent deadlines?\n   - Important long-term work?\n\n3. Plan today (7 min)\n   - 1 Big Task (2-4 hours)\n   - 2-3 Medium Tasks (30-60 min each)\n   - Small tasks/meetings/admin\n",[2220,8253,8251],{"__ignoreMap":24},[116,8255,8257],{"id":8256},"the-eisenhower-matrix","The Eisenhower Matrix",[2214,8259,8262],{"className":8260,"code":8261,"language":2671},[2669],"Urgent | Not Urgent\n--------------------|-------------------\nImportant | DO NOW          | SCHEDULE\n          | - Production bugs| - Learning\n          | - Deadlines      | - Refactoring\n          | - Emergencies    | - Planning\n--------------------|-------------------\nNot       | DELEGATE        | ELIMINATE\nImportant | - Interruptions | - Busy work\n          | - Some meetings | - Time wasters\n          | - Quick questions| - Distractions\n",[2220,8263,8261],{"__ignoreMap":24},[116,8265,8267],{"id":8266},"task-breakdown-strategy","Task Breakdown Strategy",[12,8269,8270],{},"Large tasks are overwhelming. Break them down:",[12,8272,8273,8276],{},[397,8274,8275],{},"Bad:"," \"Build authentication system\"",[12,8278,8279],{},[397,8280,8281],{},"Good:",[2214,8283,8286],{"className":8284,"code":8285,"language":2671},[2669],"1. Design database schema for users (1h)\n2. Create user model and migrations (1h)\n3. Implement registration endpoint (2h)\n4. Implement login endpoint (2h)\n5. Add JWT token generation (1h)\n6. Write tests for auth flow (2h)\n7. Add password reset feature (3h)\n",[2220,8287,8285],{"__ignoreMap":24},[116,8289,8291],{"id":8290},"time-blocking-example","Time Blocking Example",[2214,8293,8296],{"className":8294,"code":8295,"language":2671},[2669],"08:00-09:00  Morning review + planning\n09:00-12:00  Deep work block (big task)\n12:00-13:00  Lunch break\n13:00-14:30  Meetings & collaboration\n14:30-15:00  Break + quick tasks\n15:00-17:00  Deep work block (coding)\n17:00-17:30  Review day + plan tomorrow\n",[2220,8297,8295],{"__ignoreMap":24},[16,8299,8301],{"id":8300},"deep-work-and-focus-techniques","Deep Work and Focus Techniques",[116,8303,8305],{"id":8304},"the-pomodoro-technique-modified-for-developers","The Pomodoro Technique (Modified for Developers)",[12,8307,8308],{},[397,8309,8310],{},"Classic Pomodoro:",[190,8312,8313,8316,8319],{},[193,8314,8315],{},"25 minutes work",[193,8317,8318],{},"5 minutes break",[193,8320,8321],{},"After 4 pomodoros, take 15-30 minute break",[12,8323,8324],{},[397,8325,8326],{},"Extended Pomodoro (for deep coding):",[190,8328,8329,8332,8335],{},[193,8330,8331],{},"50 minutes work",[193,8333,8334],{},"10 minutes break",[193,8336,8337],{},"After 2 sessions, take 30 minute break",[12,8339,8340],{},[397,8341,447],{},[190,8343,8344,8350,8356],{},[193,8345,8346,8349],{},[397,8347,8348],{},"Flow"," (macOS) - Beautiful pomodoro timer",[193,8351,8352,8355],{},[397,8353,8354],{},"Be Focused"," (iOS/macOS) - Task-based pomodoro",[193,8357,8358,8361],{},[397,8359,8360],{},"Pomofocus"," (Web, Free) - Simple browser-based timer",[116,8363,8365],{"id":8364},"minimizing-distractions","Minimizing Distractions",[12,8367,8368],{},[397,8369,8370],{},"Browser Extensions:",[190,8372,8373,8379,8385],{},[193,8374,8375,8378],{},[397,8376,8377],{},"uBlock Origin"," - Block ads and trackers",[193,8380,8381,8384],{},[397,8382,8383],{},"LeechBlock"," - Block time-wasting sites during work hours",[193,8386,8387,8390],{},[397,8388,8389],{},"News Feed Eradicator"," - Remove social media feeds",[12,8392,8393],{},[397,8394,8395],{},"Focus Modes:",[2214,8397,8400],{"className":8398,"code":8399,"language":1930,"meta":24,"style":24},"language-javascript shiki shiki-themes github-light dark-plus dark-plus","// VS Code settings.json\n{\n  \"workbench.activityBar.visible\": false,  // Hide sidebar icons\n  \"workbench.statusBar.visible\": false,     // Hide status bar\n  \"editor.minimap.enabled\": false,          // Hide minimap\n  \"breadcrumbs.enabled\": false              // Hide breadcrumbs\n}\n// Toggle with Zen Mode: Ctrl+K Z\n",[2220,8401,8402,8407,8412,8420,8428,8436,8444,8448],{"__ignoreMap":24},[2223,8403,8404],{"class":2225,"line":2226},[2223,8405,8406],{},"// VS Code settings.json\n",[2223,8408,8409],{"class":2225,"line":28},[2223,8410,8411],{},"{\n",[2223,8413,8414,8417],{"class":2225,"line":25},[2223,8415,8416],{},"  \"workbench.activityBar.visible\": false,",[2223,8418,8419],{},"  // Hide sidebar icons\n",[2223,8421,8422,8425],{"class":2225,"line":2341},[2223,8423,8424],{},"  \"workbench.statusBar.visible\": false,",[2223,8426,8427],{},"     // Hide status bar\n",[2223,8429,8430,8433],{"class":2225,"line":336},[2223,8431,8432],{},"  \"editor.minimap.enabled\": false,",[2223,8434,8435],{},"          // Hide minimap\n",[2223,8437,8438,8441],{"class":2225,"line":2357},[2223,8439,8440],{},"  \"breadcrumbs.enabled\": false",[2223,8442,8443],{},"              // Hide breadcrumbs\n",[2223,8445,8446],{"class":2225,"line":2363},[2223,8447,4487],{},[2223,8449,8450],{"class":2225,"line":2074},[2223,8451,8452],{},"// Toggle with Zen Mode: Ctrl+K Z\n",[12,8454,8455],{},[397,8456,8457],{},"Communication Boundaries:",[2214,8459,8462],{"className":8460,"code":8461,"language":2671},[2669],"Slack Status:\n🎯 Deep Work - No interruptions (9am-12pm)\n💬 Available for quick questions (2pm-4pm)\n🏃 Stepping away - back in 15 mins\n",[2220,8463,8461],{"__ignoreMap":24},[116,8465,8467],{"id":8466},"flow-state-triggers","Flow State Triggers",[12,8469,8470],{},"To achieve flow (that state where you're fully immersed):",[675,8472,8473,8479,8485,8491,8497],{},[193,8474,8475,8478],{},[397,8476,8477],{},"Clear goals"," - Know exactly what you're building",[193,8480,8481,8484],{},[397,8482,8483],{},"Challenge/skill balance"," - Task is hard but achievable",[193,8486,8487,8490],{},[397,8488,8489],{},"Immediate feedback"," - Tests pass/fail, code runs/errors",[193,8492,8493,8496],{},[397,8494,8495],{},"No distractions"," - Phone away, notifications off",[193,8498,8499,8502],{},[397,8500,8501],{},"Time pressure"," - Deadline or time block creates urgency",[12,8504,8505],{},[397,8506,8507],{},"How to get into flow:",[190,8509,8510,8513,8516,8519],{},[193,8511,8512],{},"Start with warm-up tasks (review code, plan approach)",[193,8514,8515],{},"Use music or white noise to block external sounds",[193,8517,8518],{},"Work on one thing at a time",[193,8520,8521],{},"Build momentum with small wins first",[16,8523,8525],{"id":8524},"automation-efficiency-hacks","Automation & Efficiency Hacks",[116,8527,8529],{"id":8528},"automate-your-development-environment","Automate Your Development Environment",[12,8531,8532],{},[397,8533,8534],{},"Project Setup Script",[2214,8536,8538],{"className":2216,"code":8537,"language":2218,"meta":24,"style":24},"#!/bin/bash\n# setup-project.sh - Quick project initialization\n\nPROJECT_NAME=$1\n\nmkdir $PROJECT_NAME\ncd $PROJECT_NAME\n\n# Initialize Git\ngit init\necho \"node_modules\" > .gitignore\necho \".env\" >> .gitignore\n\n# Initialize package.json\nnpm init -y\n\n# Install common dependencies\nnpm install -D typescript @types/node eslint prettier\n\n# Create basic structure\nmkdir src tests\ntouch src/index.ts\ntouch README.md\n\n# Open in VS Code\ncode .\n\necho \"✅ Project $PROJECT_NAME ready!\"\n",[2220,8539,8540,8545,8550,8554,8564,8568,8576,8582,8586,8591,8598,8612,8624,8628,8633,8642,8646,8651,8672,8676,8681,8691,8699,8706,8710,8715,8722,8726],{"__ignoreMap":24},[2223,8541,8542],{"class":2225,"line":2226},[2223,8543,8544],{"class":2312},"#!/bin/bash\n",[2223,8546,8547],{"class":2225,"line":28},[2223,8548,8549],{"class":2312},"# setup-project.sh - Quick project initialization\n",[2223,8551,8552],{"class":2225,"line":25},[2223,8553,2616],{"emptyLinePlaceholder":33},[2223,8555,8556,8559,8561],{"class":2225,"line":2341},[2223,8557,8558],{"class":2334},"PROJECT_NAME",[2223,8560,3524],{"class":2908},[2223,8562,8563],{"class":3131},"$1\n",[2223,8565,8566],{"class":2225,"line":336},[2223,8567,2616],{"emptyLinePlaceholder":33},[2223,8569,8570,8573],{"class":2225,"line":2357},[2223,8571,8572],{"class":2229},"mkdir",[2223,8574,8575],{"class":2334}," $PROJECT_NAME\n",[2223,8577,8578,8580],{"class":2225,"line":2363},[2223,8579,2246],{"class":2245},[2223,8581,8575],{"class":2334},[2223,8583,8584],{"class":2225,"line":2074},[2223,8585,2616],{"emptyLinePlaceholder":33},[2223,8587,8588],{"class":2225,"line":43},[2223,8589,8590],{"class":2312},"# Initialize Git\n",[2223,8592,8593,8595],{"class":2225,"line":2382},[2223,8594,7700],{"class":2229},[2223,8596,8597],{"class":2233}," init\n",[2223,8599,8600,8603,8606,8609],{"class":2225,"line":1784},[2223,8601,8602],{"class":2245},"echo",[2223,8604,8605],{"class":2233}," \"node_modules\"",[2223,8607,8608],{"class":2908}," >",[2223,8610,8611],{"class":2233}," .gitignore\n",[2223,8613,8614,8616,8619,8622],{"class":2225,"line":82},[2223,8615,8602],{"class":2245},[2223,8617,8618],{"class":2233}," \".env\"",[2223,8620,8621],{"class":2908}," >>",[2223,8623,8611],{"class":2233},[2223,8625,8626],{"class":2225,"line":1432},[2223,8627,2616],{"emptyLinePlaceholder":33},[2223,8629,8630],{"class":2225,"line":369},[2223,8631,8632],{"class":2312},"# Initialize package.json\n",[2223,8634,8635,8637,8639],{"class":2225,"line":2425},[2223,8636,2253],{"class":2229},[2223,8638,2237],{"class":2233},[2223,8640,8641],{"class":2546}," -y\n",[2223,8643,8644],{"class":2225,"line":1750},[2223,8645,2616],{"emptyLinePlaceholder":33},[2223,8647,8648],{"class":2225,"line":2105},[2223,8649,8650],{"class":2312},"# Install common dependencies\n",[2223,8652,8653,8655,8657,8660,8663,8666,8669],{"class":2225,"line":2449},[2223,8654,2253],{"class":2229},[2223,8656,2271],{"class":2233},[2223,8658,8659],{"class":2546}," -D",[2223,8661,8662],{"class":2233}," typescript",[2223,8664,8665],{"class":2233}," @types/node",[2223,8667,8668],{"class":2233}," eslint",[2223,8670,8671],{"class":2233}," prettier\n",[2223,8673,8674],{"class":2225,"line":2454},[2223,8675,2616],{"emptyLinePlaceholder":33},[2223,8677,8678],{"class":2225,"line":1839},[2223,8679,8680],{"class":2312},"# Create basic structure\n",[2223,8682,8683,8685,8688],{"class":2225,"line":2473},[2223,8684,8572],{"class":2229},[2223,8686,8687],{"class":2233}," src",[2223,8689,8690],{"class":2233}," tests\n",[2223,8692,8693,8696],{"class":2225,"line":2483},[2223,8694,8695],{"class":2229},"touch",[2223,8697,8698],{"class":2233}," src/index.ts\n",[2223,8700,8701,8703],{"class":2225,"line":2493},[2223,8702,8695],{"class":2229},[2223,8704,8705],{"class":2233}," README.md\n",[2223,8707,8708],{"class":2225,"line":2504},[2223,8709,2616],{"emptyLinePlaceholder":33},[2223,8711,8712],{"class":2225,"line":2510},[2223,8713,8714],{"class":2312},"# Open in VS Code\n",[2223,8716,8717,8719],{"class":2225,"line":2516},[2223,8718,2220],{"class":2229},[2223,8720,8721],{"class":2233}," .\n",[2223,8723,8724],{"class":2225,"line":2526},[2223,8725,2616],{"emptyLinePlaceholder":33},[2223,8727,8728,8730,8733,8736],{"class":2225,"line":2540},[2223,8729,8602],{"class":2245},[2223,8731,8732],{"class":2233}," \"✅ Project ",[2223,8734,8735],{"class":2334},"$PROJECT_NAME",[2223,8737,8738],{"class":2233}," ready!\"\n",[12,8740,8741],{},[397,8742,8743],{},"Daily Standup Generator",[2214,8745,8747],{"className":2216,"code":8746,"language":2218,"meta":24,"style":24},"#!/bin/bash\n# standup.sh - Generate standup report\n\necho \"📊 Standup Report for $(date +%Y-%m-%d)\"\necho \"\"\necho \"Yesterday's commits:\"\ngit log --since=\"yesterday\" --author=\"$(git config user.name)\" --oneline\necho \"\"\necho \"Files changed:\"\ngit diff --stat HEAD@{1day}\n",[2220,8748,8749,8753,8758,8762,8775,8782,8789,8815,8821,8828],{"__ignoreMap":24},[2223,8750,8751],{"class":2225,"line":2226},[2223,8752,8544],{"class":2312},[2223,8754,8755],{"class":2225,"line":28},[2223,8756,8757],{"class":2312},"# standup.sh - Generate standup report\n",[2223,8759,8760],{"class":2225,"line":25},[2223,8761,2616],{"emptyLinePlaceholder":33},[2223,8763,8764,8766,8769,8772],{"class":2225,"line":2341},[2223,8765,8602],{"class":2245},[2223,8767,8768],{"class":2233}," \"📊 Standup Report for $(",[2223,8770,8771],{"class":2229},"date",[2223,8773,8774],{"class":2233}," +%Y-%m-%d)\"\n",[2223,8776,8777,8779],{"class":2225,"line":336},[2223,8778,8602],{"class":2245},[2223,8780,8781],{"class":2233}," \"\"\n",[2223,8783,8784,8786],{"class":2225,"line":2357},[2223,8785,8602],{"class":2245},[2223,8787,8788],{"class":2233}," \"Yesterday's commits:\"\n",[2223,8790,8791,8793,8795,8798,8801,8804,8807,8809,8812],{"class":2225,"line":2363},[2223,8792,7700],{"class":2229},[2223,8794,7722],{"class":2233},[2223,8796,8797],{"class":2546}," --since=",[2223,8799,8800],{"class":2233},"\"yesterday\"",[2223,8802,8803],{"class":2546}," --author=",[2223,8805,8806],{"class":2233},"\"$(",[2223,8808,7700],{"class":2229},[2223,8810,8811],{"class":2233}," config user.name)\"",[2223,8813,8814],{"class":2546}," --oneline\n",[2223,8816,8817,8819],{"class":2225,"line":2074},[2223,8818,8602],{"class":2245},[2223,8820,8781],{"class":2233},[2223,8822,8823,8825],{"class":2225,"line":43},[2223,8824,8602],{"class":2245},[2223,8826,8827],{"class":2233}," \"Files changed:\"\n",[2223,8829,8830,8832,8835,8838],{"class":2225,"line":2382},[2223,8831,7700],{"class":2229},[2223,8833,8834],{"class":2233}," diff",[2223,8836,8837],{"class":2546}," --stat",[2223,8839,8840],{"class":2233}," HEAD@{1day}\n",[116,8842,8844],{"id":8843},"git-aliases-for-speed","Git Aliases for Speed",[2214,8846,8848],{"className":2216,"code":8847,"language":2218,"meta":24,"style":24},"# Add to ~/.gitconfig\n\n[alias]\n  # Quick status\n  s = status -s\n  \n  # Pretty log\n  lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)\u003C%an>%Creset' --abbrev-commit\n  \n  # Undo last commit but keep changes\n  undo = reset HEAD~1 --soft\n  \n  # Quick commit all changes\n  ca = commit -am\n  \n  # Current branch name\n  current = rev-parse --abbrev-ref HEAD\n  \n  # Delete merged branches\n  cleanup = \"!git branch --merged | grep -v '\\\\*' | xargs -n 1 git branch -d\"\n",[2220,8849,8850,8855,8859,8864,8869,8882,8886,8891,8911,8915,8920,8936,8940,8945,8957,8961,8966,8982,8986,8991],{"__ignoreMap":24},[2223,8851,8852],{"class":2225,"line":2226},[2223,8853,8854],{"class":2312},"# Add to ~/.gitconfig\n",[2223,8856,8857],{"class":2225,"line":28},[2223,8858,2616],{"emptyLinePlaceholder":33},[2223,8860,8861],{"class":2225,"line":25},[2223,8862,8863],{"class":2328},"[alias]\n",[2223,8865,8866],{"class":2225,"line":2341},[2223,8867,8868],{"class":2312},"  # Quick status\n",[2223,8870,8871,8874,8876,8879],{"class":2225,"line":336},[2223,8872,8873],{"class":2229},"  s",[2223,8875,2909],{"class":2233},[2223,8877,8878],{"class":2233}," status",[2223,8880,8881],{"class":2546}," -s\n",[2223,8883,8884],{"class":2225,"line":2357},[2223,8885,2371],{"class":2328},[2223,8887,8888],{"class":2225,"line":2363},[2223,8889,8890],{"class":2312},"  # Pretty log\n",[2223,8892,8893,8896,8898,8900,8902,8905,8908],{"class":2225,"line":2074},[2223,8894,8895],{"class":2229},"  lg",[2223,8897,2909],{"class":2233},[2223,8899,7722],{"class":2233},[2223,8901,7728],{"class":2546},[2223,8903,8904],{"class":2546}," --pretty=format:",[2223,8906,8907],{"class":2233},"'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)\u003C%an>%Creset'",[2223,8909,8910],{"class":2546}," --abbrev-commit\n",[2223,8912,8913],{"class":2225,"line":43},[2223,8914,2371],{"class":2328},[2223,8916,8917],{"class":2225,"line":2382},[2223,8918,8919],{"class":2312},"  # Undo last commit but keep changes\n",[2223,8921,8922,8925,8927,8930,8933],{"class":2225,"line":1784},[2223,8923,8924],{"class":2229},"  undo",[2223,8926,2909],{"class":2233},[2223,8928,8929],{"class":2233}," reset",[2223,8931,8932],{"class":2233}," HEAD~1",[2223,8934,8935],{"class":2546}," --soft\n",[2223,8937,8938],{"class":2225,"line":82},[2223,8939,2371],{"class":2328},[2223,8941,8942],{"class":2225,"line":1432},[2223,8943,8944],{"class":2312},"  # Quick commit all changes\n",[2223,8946,8947,8950,8952,8954],{"class":2225,"line":369},[2223,8948,8949],{"class":2229},"  ca",[2223,8951,2909],{"class":2233},[2223,8953,7846],{"class":2233},[2223,8955,8956],{"class":2546}," -am\n",[2223,8958,8959],{"class":2225,"line":2425},[2223,8960,2371],{"class":2328},[2223,8962,8963],{"class":2225,"line":1750},[2223,8964,8965],{"class":2312},"  # Current branch name\n",[2223,8967,8968,8971,8973,8976,8979],{"class":2225,"line":2105},[2223,8969,8970],{"class":2229},"  current",[2223,8972,2909],{"class":2233},[2223,8974,8975],{"class":2233}," rev-parse",[2223,8977,8978],{"class":2546}," --abbrev-ref",[2223,8980,8981],{"class":2233}," HEAD\n",[2223,8983,8984],{"class":2225,"line":2449},[2223,8985,2371],{"class":2328},[2223,8987,8988],{"class":2225,"line":2454},[2223,8989,8990],{"class":2312},"  # Delete merged branches\n",[2223,8992,8993,8996,8998,9001,9005],{"class":2225,"line":1839},[2223,8994,8995],{"class":2229},"  cleanup",[2223,8997,2909],{"class":2233},[2223,8999,9000],{"class":2233}," \"!git branch --merged | grep -v '",[2223,9002,9004],{"class":9003},"sYpgL","\\\\",[2223,9006,9007],{"class":2233},"*' | xargs -n 1 git branch -d\"\n",[116,9009,9011],{"id":9010},"npmpnpm-scripts","npm/pnpm Scripts",[2214,9013,9017],{"className":9014,"code":9015,"language":9016,"meta":24,"style":24},"language-json shiki shiki-themes github-light dark-plus dark-plus","// package.json\n{\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"tsc && vite build\",\n    \"test\": \"vitest\",\n    \"test:ui\": \"vitest --ui\",\n    \"lint\": \"eslint . --ext .ts,.tsx\",\n    \"lint:fix\": \"eslint . --ext .ts,.tsx --fix\",\n    \"format\": \"prettier --write \\\"src/**/*.{ts,tsx,json}\\\"\",\n    \"type-check\": \"tsc --noEmit\",\n    \"pre-commit\": \"npm run lint && npm run type-check && npm test\",\n    \"clean\": \"rm -rf node_modules dist .cache\",\n    \"fresh\": \"npm run clean && npm install\"\n  }\n}\n","json",[2220,9018,9019,9024,9028,9035,9047,9059,9071,9083,9095,9107,9129,9141,9153,9165,9175,9179],{"__ignoreMap":24},[2223,9020,9021],{"class":2225,"line":2226},[2223,9022,9023],{"class":2312},"// package.json\n",[2223,9025,9026],{"class":2225,"line":28},[2223,9027,8411],{"class":2328},[2223,9029,9030,9033],{"class":2225,"line":25},[2223,9031,9032],{"class":6878},"  \"scripts\"",[2223,9034,5994],{"class":2328},[2223,9036,9037,9040,9042,9045],{"class":2225,"line":2341},[2223,9038,9039],{"class":6878},"    \"dev\"",[2223,9041,3613],{"class":2328},[2223,9043,9044],{"class":2233},"\"vite\"",[2223,9046,2347],{"class":2328},[2223,9048,9049,9052,9054,9057],{"class":2225,"line":336},[2223,9050,9051],{"class":6878},"    \"build\"",[2223,9053,3613],{"class":2328},[2223,9055,9056],{"class":2233},"\"tsc && vite build\"",[2223,9058,2347],{"class":2328},[2223,9060,9061,9064,9066,9069],{"class":2225,"line":2357},[2223,9062,9063],{"class":6878},"    \"test\"",[2223,9065,3613],{"class":2328},[2223,9067,9068],{"class":2233},"\"vitest\"",[2223,9070,2347],{"class":2328},[2223,9072,9073,9076,9078,9081],{"class":2225,"line":2363},[2223,9074,9075],{"class":6878},"    \"test:ui\"",[2223,9077,3613],{"class":2328},[2223,9079,9080],{"class":2233},"\"vitest --ui\"",[2223,9082,2347],{"class":2328},[2223,9084,9085,9088,9090,9093],{"class":2225,"line":2074},[2223,9086,9087],{"class":6878},"    \"lint\"",[2223,9089,3613],{"class":2328},[2223,9091,9092],{"class":2233},"\"eslint . --ext .ts,.tsx\"",[2223,9094,2347],{"class":2328},[2223,9096,9097,9100,9102,9105],{"class":2225,"line":43},[2223,9098,9099],{"class":6878},"    \"lint:fix\"",[2223,9101,3613],{"class":2328},[2223,9103,9104],{"class":2233},"\"eslint . --ext .ts,.tsx --fix\"",[2223,9106,2347],{"class":2328},[2223,9108,9109,9112,9114,9117,9120,9123,9125,9127],{"class":2225,"line":2382},[2223,9110,9111],{"class":6878},"    \"format\"",[2223,9113,3613],{"class":2328},[2223,9115,9116],{"class":2233},"\"prettier --write ",[2223,9118,9119],{"class":9003},"\\\"",[2223,9121,9122],{"class":2233},"src/**/*.{ts,tsx,json}",[2223,9124,9119],{"class":9003},[2223,9126,3944],{"class":2233},[2223,9128,2347],{"class":2328},[2223,9130,9131,9134,9136,9139],{"class":2225,"line":1784},[2223,9132,9133],{"class":6878},"    \"type-check\"",[2223,9135,3613],{"class":2328},[2223,9137,9138],{"class":2233},"\"tsc --noEmit\"",[2223,9140,2347],{"class":2328},[2223,9142,9143,9146,9148,9151],{"class":2225,"line":82},[2223,9144,9145],{"class":6878},"    \"pre-commit\"",[2223,9147,3613],{"class":2328},[2223,9149,9150],{"class":2233},"\"npm run lint && npm run type-check && npm test\"",[2223,9152,2347],{"class":2328},[2223,9154,9155,9158,9160,9163],{"class":2225,"line":1432},[2223,9156,9157],{"class":6878},"    \"clean\"",[2223,9159,3613],{"class":2328},[2223,9161,9162],{"class":2233},"\"rm -rf node_modules dist .cache\"",[2223,9164,2347],{"class":2328},[2223,9166,9167,9170,9172],{"class":2225,"line":369},[2223,9168,9169],{"class":6878},"    \"fresh\"",[2223,9171,3613],{"class":2328},[2223,9173,9174],{"class":2233},"\"npm run clean && npm install\"\n",[2223,9176,9177],{"class":2225,"line":2425},[2223,9178,2652],{"class":2328},[2223,9180,9181],{"class":2225,"line":1750},[2223,9182,4487],{"class":2328},[16,9184,9186],{"id":9185},"continuous-learning-strategies","Continuous Learning Strategies",[116,9188,9190],{"id":9189},"the-1-rule","The 1% Rule",[12,9192,9193],{},"Improve just 1% every day:",[190,9195,9196,9202,9205,9208,9211],{},[193,9197,9198,9201],{},[397,9199,9200],{},"20 minutes daily learning"," = 121 hours/year",[193,9203,9204],{},"Read 10 pages of a tech book",[193,9206,9207],{},"Complete one coding challenge",[193,9209,9210],{},"Watch one conference talk",[193,9212,9213],{},"Refactor one piece of old code",[116,9215,9217],{"id":9216},"learning-resources-2025","Learning Resources (2025)",[12,9219,9220],{},[397,9221,9222],{},"Free Resources:",[190,9224,9225,9231,9237,9243,9249],{},[193,9226,9227,9230],{},[397,9228,9229],{},"MDN Web Docs"," - Web standards documentation",[193,9232,9233,9236],{},[397,9234,9235],{},"freeCodeCamp"," - Interactive coding lessons",[193,9238,9239,9242],{},[397,9240,9241],{},"YouTube"," (Fireship, ThePrimeagen, Web Dev Simplified)",[193,9244,9245,9248],{},[397,9246,9247],{},"Dev.to"," - Community articles",[193,9250,9251,9254],{},[397,9252,9253],{},"GitHub"," - Read popular repositories' code",[12,9256,9257],{},[397,9258,9259],{},"Paid (Worth It):",[190,9261,9262,9268,9274,9280],{},[193,9263,9264,9267],{},[397,9265,9266],{},"Frontend Masters"," ($39/month) - In-depth courses",[193,9269,9270,9273],{},[397,9271,9272],{},"Egghead.io"," ($40/month) - Short, focused lessons",[193,9275,9276,9279],{},[397,9277,9278],{},"Udemy"," (Sales ~$15/course) - Huge course library",[193,9281,9282,9285],{},[397,9283,9284],{},"Pluralsight"," ($29/month) - Enterprise-focused",[116,9287,9289],{"id":9288},"effective-code-reading","Effective Code Reading",[12,9291,9292],{},[397,9293,9294],{},"How to learn from reading code:",[675,9296,9297,9316,9332,9348],{},[193,9298,9299,9302],{},[397,9300,9301],{},"Choose quality codebases:",[190,9303,9304,9307,9310,9313],{},[193,9305,9306],{},"Next.js",[193,9308,9309],{},"Nuxt",[193,9311,9312],{},"Vue/React source code",[193,9314,9315],{},"Popular npm packages",[193,9317,9318,9321],{},[397,9319,9320],{},"Start small:",[190,9322,9323,9326,9329],{},[193,9324,9325],{},"Don't read the whole thing",[193,9327,9328],{},"Pick one feature",[193,9330,9331],{},"Trace execution flow",[193,9333,9334,9337],{},[397,9335,9336],{},"Ask questions:",[190,9338,9339,9342,9345],{},[193,9340,9341],{},"Why this pattern?",[193,9343,9344],{},"What problem does this solve?",[193,9346,9347],{},"How could I use this?",[193,9349,9350,9353],{},[397,9351,9352],{},"Take notes:",[190,9354,9355,9358],{},[193,9356,9357],{},"Document interesting patterns",[193,9359,9360],{},"Create a \"patterns library\"",[16,9362,9364],{"id":9363},"health-sustainability","Health & Sustainability",[116,9366,9368],{"id":9367},"the-developers-health-checklist","The Developer's Health Checklist",[12,9370,9371],{},[397,9372,9373],{},"Physical Health:",[190,9375,9376,9379,9382,9385,9388],{},[193,9377,9378],{},"✅ 20-20-20 rule: Every 20 minutes, look at something 20 feet away for 20 seconds",[193,9380,9381],{},"✅ Stand up and stretch every hour",[193,9383,9384],{},"✅ Ergonomic setup (monitor at eye level, feet flat on floor)",[193,9386,9387],{},"✅ 7-8 hours sleep (non-negotiable for cognitive function)",[193,9389,9390],{},"✅ Exercise 30 minutes daily (walk, gym, yoga)",[12,9392,9393],{},[397,9394,9395],{},"Mental Health:",[190,9397,9398,9401,9404,9407,9410],{},[193,9399,9400],{},"✅ Set clear work boundaries (no coding after 7pm)",[193,9402,9403],{},"✅ Take real lunch breaks away from computer",[193,9405,9406],{},"✅ Weekend detox from work (no Slack, no email)",[193,9408,9409],{},"✅ Hobbies unrelated to coding",[193,9411,9412],{},"✅ Social connections (don't isolate)",[116,9414,9416],{"id":9415},"preventing-burnout","Preventing Burnout",[12,9418,9419],{},[397,9420,9421],{},"Warning Signs:",[190,9423,9424,9427,9430,9433,9436],{},[193,9425,9426],{},"Cynicism about work",[193,9428,9429],{},"Procrastination increases",[193,9431,9432],{},"Quality of work declines",[193,9434,9435],{},"Physical exhaustion",[193,9437,9438],{},"Irritability",[12,9440,9441],{},[397,9442,9443],{},"Prevention:",[190,9445,9446,9452,9458,9464,9470],{},[193,9447,9448,9451],{},[397,9449,9450],{},"Say no more often"," - Don't overcommit",[193,9453,9454,9457],{},[397,9455,9456],{},"Take vacations"," - Minimum 2 weeks/year",[193,9459,9460,9463],{},[397,9461,9462],{},"Set boundaries"," - Work hours are work hours",[193,9465,9466,9469],{},[397,9467,9468],{},"Celebrate wins"," - Acknowledge completed projects",[193,9471,9472,9475],{},[397,9473,9474],{},"Switch contexts"," - Work on different types of tasks",[116,9477,9479],{"id":9478},"ergonomic-setup-investment","Ergonomic Setup Investment",[12,9481,9482],{},[397,9483,9484],{},"Essential:",[190,9486,9487,9493,9499,9505,9511],{},[193,9488,9489,9492],{},[397,9490,9491],{},"Adjustable chair"," ($200-500) - Herman Miller Aeron or similar",[193,9494,9495,9498],{},[397,9496,9497],{},"Monitor arm"," ($100-200) - Ergotron LX",[193,9500,9501,9504],{},[397,9502,9503],{},"Ergonomic keyboard"," ($150-300) - Kinesis, Moonlander, or ZSA",[193,9506,9507,9510],{},[397,9508,9509],{},"External mouse"," ($50-100) - Logitech MX Master 3S",[193,9512,9513,9516],{},[397,9514,9515],{},"Good lighting"," ($30-100) - Reduce eye strain",[12,9518,9519],{},[397,9520,9521],{},"Nice to Have:",[190,9523,9524,9530,9536,9542],{},[193,9525,9526,9529],{},[397,9527,9528],{},"Standing desk"," ($300-800) - Fully Jarvis or Uplift",[193,9531,9532,9535],{},[397,9533,9534],{},"Footrest"," ($30-50)",[193,9537,9538,9541],{},[397,9539,9540],{},"Blue light glasses"," ($30-100)",[193,9543,9544,9547],{},[397,9545,9546],{},"Noise-cancelling headphones"," ($200-400) - Sony WH-1000XM5",[16,9549,9551],{"id":9550},"collaboration-communication","Collaboration & Communication",[116,9553,9555],{"id":9554},"effective-code-reviews","Effective Code Reviews",[12,9557,9558],{},[397,9559,9560],{},"As Author:",[2214,9562,9564],{"className":2683,"code":9563,"language":2685,"meta":24,"style":24},"## PR Description Template\n\n### What\nBrief description of changes\n\n### Why\nProblem this solves or feature it adds\n\n### How\nTechnical approach used\n\n### Testing\n- [ ] Unit tests added\n- [ ] Manual testing completed\n- [ ] Edge cases considered\n\n### Screenshots (if UI changes)\n[Add screenshots]\n\n### Checklist\n- [ ] Code follows style guide\n- [ ] No console.logs left\n- [ ] Documentation updated\n",[2220,9565,9566,9571,9575,9580,9585,9589,9594,9599,9603,9608,9613,9617,9622,9627,9632,9637,9641,9646,9651,9655,9660,9665,9670],{"__ignoreMap":24},[2223,9567,9568],{"class":2225,"line":2226},[2223,9569,9570],{},"## PR Description Template\n",[2223,9572,9573],{"class":2225,"line":28},[2223,9574,2616],{"emptyLinePlaceholder":33},[2223,9576,9577],{"class":2225,"line":25},[2223,9578,9579],{},"### What\n",[2223,9581,9582],{"class":2225,"line":2341},[2223,9583,9584],{},"Brief description of changes\n",[2223,9586,9587],{"class":2225,"line":336},[2223,9588,2616],{"emptyLinePlaceholder":33},[2223,9590,9591],{"class":2225,"line":2357},[2223,9592,9593],{},"### Why\n",[2223,9595,9596],{"class":2225,"line":2363},[2223,9597,9598],{},"Problem this solves or feature it adds\n",[2223,9600,9601],{"class":2225,"line":2074},[2223,9602,2616],{"emptyLinePlaceholder":33},[2223,9604,9605],{"class":2225,"line":43},[2223,9606,9607],{},"### How\n",[2223,9609,9610],{"class":2225,"line":2382},[2223,9611,9612],{},"Technical approach used\n",[2223,9614,9615],{"class":2225,"line":1784},[2223,9616,2616],{"emptyLinePlaceholder":33},[2223,9618,9619],{"class":2225,"line":82},[2223,9620,9621],{},"### Testing\n",[2223,9623,9624],{"class":2225,"line":1432},[2223,9625,9626],{},"- [ ] Unit tests added\n",[2223,9628,9629],{"class":2225,"line":369},[2223,9630,9631],{},"- [ ] Manual testing completed\n",[2223,9633,9634],{"class":2225,"line":2425},[2223,9635,9636],{},"- [ ] Edge cases considered\n",[2223,9638,9639],{"class":2225,"line":1750},[2223,9640,2616],{"emptyLinePlaceholder":33},[2223,9642,9643],{"class":2225,"line":2105},[2223,9644,9645],{},"### Screenshots (if UI changes)\n",[2223,9647,9648],{"class":2225,"line":2449},[2223,9649,9650],{},"[Add screenshots]\n",[2223,9652,9653],{"class":2225,"line":2454},[2223,9654,2616],{"emptyLinePlaceholder":33},[2223,9656,9657],{"class":2225,"line":1839},[2223,9658,9659],{},"### Checklist\n",[2223,9661,9662],{"class":2225,"line":2473},[2223,9663,9664],{},"- [ ] Code follows style guide\n",[2223,9666,9667],{"class":2225,"line":2483},[2223,9668,9669],{},"- [ ] No console.logs left\n",[2223,9671,9672],{"class":2225,"line":2493},[2223,9673,9674],{},"- [ ] Documentation updated\n",[12,9676,9677],{},[397,9678,9679],{},"As Reviewer:",[190,9681,9682,9688,9694,9700,9706],{},[193,9683,9684,9687],{},[397,9685,9686],{},"Be kind"," - Assume good intent",[193,9689,9690,9693],{},[397,9691,9692],{},"Be specific"," - Not \"this is bad\" but \"consider using X because Y\"",[193,9695,9696,9699],{},[397,9697,9698],{},"Ask questions"," - \"Why did you choose this approach?\"",[193,9701,9702,9705],{},[397,9703,9704],{},"Approve fast"," - Don't block on nitpicks",[193,9707,9708,9711,9712],{},[397,9709,9710],{},"Use prefixes",":\n",[190,9713,9714,9720,9726],{},[193,9715,9716,9719],{},[2220,9717,9718],{},"nit:"," - Minor suggestion, not blocking",[193,9721,9722,9725],{},[2220,9723,9724],{},"question:"," - Seeking clarification",[193,9727,9728,9731],{},[2220,9729,9730],{},"blocking:"," - Must fix before merge",[116,9733,9735],{"id":9734},"async-communication-best-practices","Async Communication Best Practices",[12,9737,9738],{},[397,9739,9740],{},"Slack/Discord:",[2214,9742,9745],{"className":9743,"code":9744,"language":2671},[2669],"❌ \"hey\"\n❌ \"are you there?\"\n❌ \"can I ask you something?\"\n\n✅ \"Hey! Working on the auth feature. Getting a 401 error \n   when calling /api/login. Here's the error: [paste]. \n   I've tried X and Y. Any ideas?\"\n",[2220,9746,9744],{"__ignoreMap":24},[12,9748,9749],{},[397,9750,9751],{},"Writing Good Commit Messages:",[2214,9753,9755],{"className":2216,"code":9754,"language":2218,"meta":24,"style":24},"# Bad\ngit commit -m \"fixed bug\"\ngit commit -m \"updates\"\n\n# Good\ngit commit -m \"fix(auth): prevent session timeout on mobile browsers\n\n- Add keepalive ping every 5 minutes\n- Store session in localStorage as backup\n- Fixes #234\"\n",[2220,9756,9757,9762,9773,9784,9788,9793,9804,9808,9813,9818],{"__ignoreMap":24},[2223,9758,9759],{"class":2225,"line":2226},[2223,9760,9761],{"class":2312},"# Bad\n",[2223,9763,9764,9766,9768,9770],{"class":2225,"line":28},[2223,9765,7700],{"class":2229},[2223,9767,7846],{"class":2233},[2223,9769,7800],{"class":2546},[2223,9771,9772],{"class":2233}," \"fixed bug\"\n",[2223,9774,9775,9777,9779,9781],{"class":2225,"line":25},[2223,9776,7700],{"class":2229},[2223,9778,7846],{"class":2233},[2223,9780,7800],{"class":2546},[2223,9782,9783],{"class":2233}," \"updates\"\n",[2223,9785,9786],{"class":2225,"line":2341},[2223,9787,2616],{"emptyLinePlaceholder":33},[2223,9789,9790],{"class":2225,"line":336},[2223,9791,9792],{"class":2312},"# Good\n",[2223,9794,9795,9797,9799,9801],{"class":2225,"line":2357},[2223,9796,7700],{"class":2229},[2223,9798,7846],{"class":2233},[2223,9800,7800],{"class":2546},[2223,9802,9803],{"class":2233}," \"fix(auth): prevent session timeout on mobile browsers\n",[2223,9805,9806],{"class":2225,"line":2363},[2223,9807,2616],{"emptyLinePlaceholder":33},[2223,9809,9810],{"class":2225,"line":2074},[2223,9811,9812],{"class":2233},"- Add keepalive ping every 5 minutes\n",[2223,9814,9815],{"class":2225,"line":43},[2223,9816,9817],{"class":2233},"- Store session in localStorage as backup\n",[2223,9819,9820],{"class":2225,"line":2382},[2223,9821,9822],{"class":2233},"- Fixes #234\"\n",[116,9824,9826],{"id":9825},"pair-programming-mentoring","Pair Programming & Mentoring",[12,9828,9829],{},[397,9830,9831],{},"When to pair program:",[190,9833,9834,9837,9840,9843],{},[193,9835,9836],{},"Complex problems",[193,9838,9839],{},"Onboarding new team members",[193,9841,9842],{},"Knowledge sharing",[193,9844,9845],{},"Debugging tricky bugs",[12,9847,9848],{},[397,9849,9850],{},"Roles:",[190,9852,9853,9859],{},[193,9854,9855,9858],{},[397,9856,9857],{},"Driver",": Types and implements",[193,9860,9861,9864],{},[397,9862,9863],{},"Navigator",": Thinks ahead, suggests, reviews",[12,9866,9867],{},[397,9868,447],{},[190,9870,9871,9877,9883],{},[193,9872,9873,9876],{},[397,9874,9875],{},"VS Code Live Share"," - Real-time collaboration",[193,9878,9879,9882],{},[397,9880,9881],{},"Tuple"," - Remote pair programming",[193,9884,9885,9888],{},[397,9886,9887],{},"Pop"," - Instant screen sharing",[16,9890,9892],{"id":9891},"measuring-improving","Measuring & Improving",[116,9894,9896],{"id":9895},"track-your-progress","Track Your Progress",[12,9898,9899],{},[397,9900,9901],{},"Weekly Review Template:",[2214,9903,9905],{"className":2683,"code":9904,"language":2685,"meta":24,"style":24},"## Week of [Date]\n\n### Completed\n- [x] Feature: User authentication\n- [x] Fixed: Memory leak in dashboard\n- [x] Learning: Completed TypeScript course section 3\n\n### Blocked/Challenges\n- Waiting for API documentation\n- Struggling with WebSocket implementation\n\n### Next Week Goals\n1. Complete auth feature\n2. Research WebSocket best practices\n3. Refactor user service\n\n### What Went Well\n- Good focus during morning sessions\n- Pair programming session was productive\n\n### What to Improve\n- Too many meetings (reduce or batch them)\n- Need to take more breaks\n",[2220,9906,9907,9912,9916,9921,9926,9931,9936,9940,9945,9950,9955,9959,9964,9969,9974,9979,9983,9988,9993,9998,10002,10007,10012],{"__ignoreMap":24},[2223,9908,9909],{"class":2225,"line":2226},[2223,9910,9911],{},"## Week of [Date]\n",[2223,9913,9914],{"class":2225,"line":28},[2223,9915,2616],{"emptyLinePlaceholder":33},[2223,9917,9918],{"class":2225,"line":25},[2223,9919,9920],{},"### Completed\n",[2223,9922,9923],{"class":2225,"line":2341},[2223,9924,9925],{},"- [x] Feature: User authentication\n",[2223,9927,9928],{"class":2225,"line":336},[2223,9929,9930],{},"- [x] Fixed: Memory leak in dashboard\n",[2223,9932,9933],{"class":2225,"line":2357},[2223,9934,9935],{},"- [x] Learning: Completed TypeScript course section 3\n",[2223,9937,9938],{"class":2225,"line":2363},[2223,9939,2616],{"emptyLinePlaceholder":33},[2223,9941,9942],{"class":2225,"line":2074},[2223,9943,9944],{},"### Blocked/Challenges\n",[2223,9946,9947],{"class":2225,"line":43},[2223,9948,9949],{},"- Waiting for API documentation\n",[2223,9951,9952],{"class":2225,"line":2382},[2223,9953,9954],{},"- Struggling with WebSocket implementation\n",[2223,9956,9957],{"class":2225,"line":1784},[2223,9958,2616],{"emptyLinePlaceholder":33},[2223,9960,9961],{"class":2225,"line":82},[2223,9962,9963],{},"### Next Week Goals\n",[2223,9965,9966],{"class":2225,"line":1432},[2223,9967,9968],{},"1. Complete auth feature\n",[2223,9970,9971],{"class":2225,"line":369},[2223,9972,9973],{},"2. Research WebSocket best practices\n",[2223,9975,9976],{"class":2225,"line":2425},[2223,9977,9978],{},"3. Refactor user service\n",[2223,9980,9981],{"class":2225,"line":1750},[2223,9982,2616],{"emptyLinePlaceholder":33},[2223,9984,9985],{"class":2225,"line":2105},[2223,9986,9987],{},"### What Went Well\n",[2223,9989,9990],{"class":2225,"line":2449},[2223,9991,9992],{},"- Good focus during morning sessions\n",[2223,9994,9995],{"class":2225,"line":2454},[2223,9996,9997],{},"- Pair programming session was productive\n",[2223,9999,10000],{"class":2225,"line":1839},[2223,10001,2616],{"emptyLinePlaceholder":33},[2223,10003,10004],{"class":2225,"line":2473},[2223,10005,10006],{},"### What to Improve\n",[2223,10008,10009],{"class":2225,"line":2483},[2223,10010,10011],{},"- Too many meetings (reduce or batch them)\n",[2223,10013,10014],{"class":2225,"line":2493},[2223,10015,10016],{},"- Need to take more breaks\n",[116,10018,10020],{"id":10019},"productivity-metrics-use-sparingly","Productivity Metrics (Use Sparingly)",[12,10022,10023],{},[397,10024,10025],{},"Good Metrics:",[190,10027,10028,10031,10034,10037],{},[193,10029,10030],{},"Story points completed",[193,10032,10033],{},"Code review turnaround time",[193,10035,10036],{},"Deployment frequency",[193,10038,10039],{},"Time to recovery from failures",[12,10041,10042],{},[397,10043,10044],{},"Bad Metrics (Don't optimize for these):",[190,10046,10047,10050,10053,10056],{},[193,10048,10049],{},"Lines of code written",[193,10051,10052],{},"Hours worked",[193,10054,10055],{},"Number of commits",[193,10057,10058],{},"Speed of code writing",[16,10060,10062],{"id":10061},"your-30-day-productivity-transformation","Your 30-Day Productivity Transformation",[116,10064,10066],{"id":10065},"week-1-foundation","Week 1: Foundation",[190,10068,10071,10080,10086,10092,10098],{"className":10069},[10070],"contains-task-list",[193,10072,10075,10079],{"className":10073},[10074],"task-list-item",[10076,10077],"input",{"disabled":33,"type":10078},"checkbox"," Set up modern terminal (Starship, zsh, useful aliases)",[193,10081,10083,10085],{"className":10082},[10074],[10076,10084],{"disabled":33,"type":10078}," Install essential VS Code extensions",[193,10087,10089,10091],{"className":10088},[10074],[10076,10090],{"disabled":33,"type":10078}," Configure GitHub Copilot or try Cursor",[193,10093,10095,10097],{"className":10094},[10074],[10076,10096],{"disabled":33,"type":10078}," Create morning planning ritual (15 min daily)",[193,10099,10101,10103],{"className":10100},[10074],[10076,10102],{"disabled":33,"type":10078}," Try Pomodoro technique for one week",[116,10105,10107],{"id":10106},"week-2-deep-work","Week 2: Deep Work",[190,10109,10111,10117,10123,10129,10135],{"className":10110},[10070],[193,10112,10114,10116],{"className":10113},[10074],[10076,10115],{"disabled":33,"type":10078}," Identify your peak focus hours",[193,10118,10120,10122],{"className":10119},[10074],[10076,10121],{"disabled":33,"type":10078}," Block 2-hour deep work sessions daily",[193,10124,10126,10128],{"className":10125},[10074],[10076,10127],{"disabled":33,"type":10078}," Turn off all notifications during focus time",[193,10130,10132,10134],{"className":10131},[10074],[10076,10133],{"disabled":33,"type":10078}," Install website blocker for distractions",[193,10136,10138,10140],{"className":10137},[10074],[10076,10139],{"disabled":33,"type":10078}," Practice getting into flow state",[116,10142,10144],{"id":10143},"week-3-automation","Week 3: Automation",[190,10146,10148,10154,10160,10166,10172],{"className":10147},[10070],[193,10149,10151,10153],{"className":10150},[10074],[10076,10152],{"disabled":33,"type":10078}," Create 3 Git aliases you'll actually use",[193,10155,10157,10159],{"className":10156},[10074],[10076,10158],{"disabled":33,"type":10078}," Write one automation script for repetitive task",[193,10161,10163,10165],{"className":10162},[10074],[10076,10164],{"disabled":33,"type":10078}," Set up WakaTime to track coding time",[193,10167,10169,10171],{"className":10168},[10074],[10076,10170],{"disabled":33,"type":10078}," Organize your TODO system (Notion/Linear)",[193,10173,10175,10177],{"className":10174},[10074],[10076,10176],{"disabled":33,"type":10078}," Automate your development environment setup",[116,10179,10181],{"id":10180},"week-4-sustainability","Week 4: Sustainability",[190,10183,10185,10191,10197,10203,10209],{"className":10184},[10070],[193,10186,10188,10190],{"className":10187},[10074],[10076,10189],{"disabled":33,"type":10078}," Establish clear work boundaries",[193,10192,10194,10196],{"className":10193},[10074],[10076,10195],{"disabled":33,"type":10078}," Set up ergonomic workspace",[193,10198,10200,10202],{"className":10199},[10074],[10076,10201],{"disabled":33,"type":10078}," Schedule 20 min daily learning",[193,10204,10206,10208],{"className":10205},[10074],[10076,10207],{"disabled":33,"type":10078}," Start weekly review habit",[193,10210,10212,10214],{"className":10211},[10074],[10076,10213],{"disabled":33,"type":10078}," Plan next month's learning goals",[16,10216,301],{"id":300},[12,10218,10219],{},"Productivity isn't about cramming more work into your day—it's about doing the right work effectively, sustainably, and enjoyably. The tools and techniques in this guide are battle-tested by thousands of developers in 2025.",[12,10221,10222],{},[397,10223,10224],{},"Key Takeaways:",[675,10226,10227,10233,10239,10245,10251],{},[193,10228,10229,10232],{},[397,10230,10231],{},"Invest in your tools"," - The right setup pays for itself in hours saved",[193,10234,10235,10238],{},[397,10236,10237],{},"Protect your focus"," - Deep work is your superpower",[193,10240,10241,10244],{},[397,10242,10243],{},"Automate ruthlessly"," - Never do manually what can be scripted",[193,10246,10247,10250],{},[397,10248,10249],{},"Learn continuously"," - 20 minutes daily compounds over time",[193,10252,10253,10256],{},[397,10254,10255],{},"Take care of yourself"," - Burnout destroys productivity",[12,10258,10259],{},"Start small. Pick 2-3 changes from this guide and implement them this week. Once they become habits, add more. In 30 days, you'll be amazed at the difference.",[12,10261,10262],{},[397,10263,10264],{},"Your productivity journey starts now. What will you implement first?",[6642,10266,10267],{},"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 .s56mj, html code.shiki .s56mj{--shiki-light:#6A737D;--shiki-default:#6A9955;--shiki-dark:#6A9955}html pre.shiki code .svuFb, html code.shiki .svuFb{--shiki-light:#6F42C1;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}html pre.shiki code .sGDl4, html code.shiki .sGDl4{--shiki-light:#032F62;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .s7v1m, html code.shiki .s7v1m{--shiki-light:#005CC5;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .s1p9p, html code.shiki .s1p9p{--shiki-light:#D73A49;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .sG4b4, html code.shiki .sG4b4{--shiki-light:#24292E;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .seC34, html code.shiki .seC34{--shiki-light:#005CC5;--shiki-default:#B5CEA8;--shiki-dark:#B5CEA8}html pre.shiki code .s5uUr, html code.shiki .s5uUr{--shiki-light:#D73A49;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .sZiGn, html code.shiki .sZiGn{--shiki-light:#24292E;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .s9TRk, html code.shiki .s9TRk{--shiki-light:#E36209;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .sNX3-, html code.shiki .sNX3-{--shiki-light:#005CC5;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}html pre.shiki code .sYpgL, html code.shiki .sYpgL{--shiki-light:#005CC5;--shiki-default:#D7BA7D;--shiki-dark:#D7BA7D}html pre.shiki code .sps74, html code.shiki .sps74{--shiki-light:#005CC5;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}",{"title":24,"searchDepth":25,"depth":25,"links":10269},[10270,10278,10284,10289,10294,10299,10304,10309,10313,10319],{"id":7533,"depth":28,"text":7534,"children":10271},[10272,10273,10274,10275,10276,10277],{"id":7537,"depth":25,"text":7538},{"id":7600,"depth":25,"text":7601},{"id":7679,"depth":25,"text":7680},{"id":7970,"depth":25,"text":7971},{"id":8024,"depth":25,"text":8025},{"id":8204,"depth":25,"text":8205},{"id":8242,"depth":28,"text":8243,"children":10279},[10280,10281,10282,10283],{"id":8246,"depth":25,"text":8247},{"id":8256,"depth":25,"text":8257},{"id":8266,"depth":25,"text":8267},{"id":8290,"depth":25,"text":8291},{"id":8300,"depth":28,"text":8301,"children":10285},[10286,10287,10288],{"id":8304,"depth":25,"text":8305},{"id":8364,"depth":25,"text":8365},{"id":8466,"depth":25,"text":8467},{"id":8524,"depth":28,"text":8525,"children":10290},[10291,10292,10293],{"id":8528,"depth":25,"text":8529},{"id":8843,"depth":25,"text":8844},{"id":9010,"depth":25,"text":9011},{"id":9185,"depth":28,"text":9186,"children":10295},[10296,10297,10298],{"id":9189,"depth":25,"text":9190},{"id":9216,"depth":25,"text":9217},{"id":9288,"depth":25,"text":9289},{"id":9363,"depth":28,"text":9364,"children":10300},[10301,10302,10303],{"id":9367,"depth":25,"text":9368},{"id":9415,"depth":25,"text":9416},{"id":9478,"depth":25,"text":9479},{"id":9550,"depth":28,"text":9551,"children":10305},[10306,10307,10308],{"id":9554,"depth":25,"text":9555},{"id":9734,"depth":25,"text":9735},{"id":9825,"depth":25,"text":9826},{"id":9891,"depth":28,"text":9892,"children":10310},[10311,10312],{"id":9895,"depth":25,"text":9896},{"id":10019,"depth":25,"text":10020},{"id":10061,"depth":28,"text":10062,"children":10314},[10315,10316,10317,10318],{"id":10065,"depth":25,"text":10066},{"id":10106,"depth":25,"text":10107},{"id":10143,"depth":25,"text":10144},{"id":10180,"depth":25,"text":10181},{"id":300,"depth":28,"text":301},"A comprehensive guide to maximizing your productivity as a developer in 2025 with modern tools, proven techniques, and sustainable habits that actually work.","https://images.unsplash.com/photo-1552664730-d307ca884978?q=80&w=1200",{"excerpt":10323},{"type":9,"value":10324},[10325,10327],[12,10326,7527],{},[12,10328,7530],{},"/developer-productivity","2025-05-05",{"title":7522,"description":10320},"developer-productivity",[373,1759,10334,10335,10336,10337,10338,1756],"workflow","efficiency","developer-tips","ai-tools","vscode","2025-10-10","adbgKyGELHrHGLLDr_yG6LCQxYDZwnI_XeHwOniEN98",{"id":10342,"title":10343,"author":7,"body":10344,"category":1829,"description":10371,"extension":31,"image":10372,"isDraft":33,"isFeatured":34,"locale":35,"meta":10373,"navigation":33,"path":10378,"publishedAt":1838,"readingTime":1839,"seo":10379,"stem":10380,"tags":10381,"updatedAt":1838,"__hash__":10385},"articles_en/email-builder-platform-case-study.md","Email Builder Platform: Drag-and-Drop Campaign Management",{"type":9,"value":10345,"toc":10365},[10346,10349,10351,10353,10355,10357,10359,10361,10363],[12,10347,10348],{},"A comprehensive case study of building a drag-and-drop email builder platform with advanced campaign management features.",[16,10350,1801],{"id":1800},[12,10352,1804],{},[16,10354,1808],{"id":1807},[12,10356,1804],{},[16,10358,1814],{"id":1813},[12,10360,1804],{},[16,10362,1820],{"id":1819},[12,10364,1804],{},{"title":24,"searchDepth":25,"depth":25,"links":10366},[10367,10368,10369,10370],{"id":1800,"depth":28,"text":1801},{"id":1807,"depth":28,"text":1808},{"id":1813,"depth":28,"text":1814},{"id":1819,"depth":28,"text":1820},"Case study of an email builder platform with drag-and-drop functionality for building emails and managing campaigns.","https://images.unsplash.com/photo-1596526131083-e8c633c948d2?q=80&w=1200&auto=format&fit=crop",{"excerpt":10374},{"type":9,"value":10375},[10376],[12,10377,10348],{},"/email-builder-platform-case-study",{"title":10343,"description":10371},"email-builder-platform-case-study",[1829,73,10382,10383,10384],"email-marketing","saas","marketing-automation","dLppclZPIxnjrixRI88OkZVICioj5fdVcNATiXvFps4",{"id":10387,"title":10388,"author":7,"body":10389,"category":373,"description":18203,"extension":31,"image":18204,"isDraft":34,"isFeatured":33,"locale":35,"meta":18205,"navigation":33,"path":18210,"publishedAt":1749,"readingTime":2449,"seo":18211,"stem":18212,"tags":18213,"updatedAt":10339,"__hash__":18220},"articles_en/essential-vue3-patterns.md","Essential Vue 3 Patterns for Building Modern, Scalable Applications in 2025",{"type":9,"value":10390,"toc":18171},[10391,10394,10398,10401,10471,10786,10790,10793,10816,10824,10998,11003,11083,11087,11090,11094,11557,11561,11924,11928,11931,12220,12227,12233,12260,12264,12267,12291,12476,12480,12486,12711,12715,12718,12722,13003,13007,13445,13449,13453,13456,13717,13721,14126,14129,14201,14205,15197,15200,16101,16105,16109,16271,16275,17129,17133,17435,17439,17443,17822,17826,18160,18162,18168],[12,10392,10393],{},"Vue 3 has revolutionized how developers build interactive and performant user interfaces. Its Composition API, improved TypeScript support, and new features like Teleport and Suspense have paved the way for more scalable, maintainable, and efficient application development. Mastering essential Vue 3 patterns is crucial for any developer looking to build modern web applications. This guide delves into key patterns and best practices.",[16,10395,10397],{"id":10396},"_1-mastering-the-composition-api","1. Mastering the Composition API",[12,10399,10400],{},"The Composition API is the cornerstone of modern Vue 3 development, offering a flexible way to organize and reuse logic.",[190,10402,10403,10412,10438,10447],{},[193,10404,10405,10411],{},[397,10406,10407,10410],{},[2220,10408,10409],{},"setup()"," function:"," The entry point for using the Composition API within components. It's where you declare reactive state, computed properties, watchers, and lifecycle hooks.",[193,10413,10414,10424],{},[397,10415,10416,10417,10420,10421,2300],{},"Reactivity with ",[2220,10418,10419],{},"ref"," and ",[2220,10422,10423],{},"reactive",[190,10425,10426,10432],{},[193,10427,10428,10431],{},[2220,10429,10430],{},"ref()",": Used for creating reactive references for primitive values (String, Number, Boolean) or single objects.",[193,10433,10434,10437],{},[2220,10435,10436],{},"reactive()",": Used for creating reactive proxies for objects. Changes to the object's properties are tracked.",[193,10439,10440,10446],{},[397,10441,10442,10443,4000],{},"Computed Properties (",[2220,10444,10445],{},"computed",": For deriving state based on other reactive sources. They are cached and only re-evaluate when their dependencies change.",[193,10448,10449,9711,10457],{},[397,10450,10451,10452,10420,10454,4000],{},"Watchers (",[2220,10453,6406],{},[2220,10455,10456],{},"watchEffect",[190,10458,10459,10465],{},[193,10460,10461,10464],{},[2220,10462,10463],{},"watch()",": Explicitly watch a specific reactive source and run a callback when it changes. Offers more control over dependencies and timing.",[193,10466,10467,10470],{},[2220,10468,10469],{},"watchEffect()",": Runs a function immediately and re-runs it whenever any of its reactive dependencies change. Simpler for straightforward side effects.",[2214,10472,10474],{"className":3501,"code":10473,"language":3503,"meta":24,"style":24},"\u003Cscript setup lang=\"ts\">\nimport { ref, reactive, computed, watch, watchEffect } from \"vue\";\n\n// Reactive state\nconst count = ref(0);\nconst user = reactive({ name: \"John Doe\", age: 30 });\n\n// Computed property\nconst doubledCount = computed(() => count.value * 2);\n\n// Watcher\nwatch(count, (newVal, oldVal) => {\n  console.log(`Count changed from ${oldVal} to ${newVal}`);\n});\n\n// watchEffect\nwatchEffect(() => {\n  console.log(`Current user name: ${user.name}`);\n});\n\nfunction increment() {\n  count.value++;\n}\n\u003C/script>\n",[2220,10475,10476,10492,10525,10529,10534,10553,10583,10587,10592,10621,10625,10630,10656,10690,10694,10698,10703,10713,10741,10745,10749,10760,10774,10778],{"__ignoreMap":24},[2223,10477,10478,10480,10482,10484,10486,10488,10490],{"class":2225,"line":2226},[2223,10479,3113],{"class":3510},[2223,10481,3514],{"class":3513},[2223,10483,3518],{"class":3517},[2223,10485,3521],{"class":3517},[2223,10487,3524],{"class":2328},[2223,10489,3527],{"class":2233},[2223,10491,3530],{"class":3510},[2223,10493,10494,10496,10498,10500,10502,10504,10506,10508,10510,10512,10514,10516,10518,10520,10523],{"class":2225,"line":28},[2223,10495,2871],{"class":2318},[2223,10497,2874],{"class":2328},[2223,10499,10419],{"class":2334},[2223,10501,269],{"class":2328},[2223,10503,10423],{"class":2334},[2223,10505,269],{"class":2328},[2223,10507,10445],{"class":2334},[2223,10509,269],{"class":2328},[2223,10511,6406],{"class":2334},[2223,10513,269],{"class":2328},[2223,10515,10456],{"class":2334},[2223,10517,2880],{"class":2328},[2223,10519,2883],{"class":2318},[2223,10521,10522],{"class":2233}," \"vue\"",[2223,10524,2889],{"class":2328},[2223,10526,10527],{"class":2225,"line":25},[2223,10528,2616],{"emptyLinePlaceholder":33},[2223,10530,10531],{"class":2225,"line":2341},[2223,10532,10533],{"class":2312},"// Reactive state\n",[2223,10535,10536,10538,10541,10543,10546,10548,10551],{"class":2225,"line":336},[2223,10537,3564],{"class":2900},[2223,10539,10540],{"class":2904}," count",[2223,10542,2909],{"class":2908},[2223,10544,10545],{"class":2229}," ref",[2223,10547,3001],{"class":2328},[2223,10549,10550],{"class":4463},"0",[2223,10552,3691],{"class":2328},[2223,10554,10555,10557,10560,10562,10565,10567,10569,10572,10574,10577,10580],{"class":2225,"line":2357},[2223,10556,3564],{"class":2900},[2223,10558,10559],{"class":2904}," user",[2223,10561,2909],{"class":2908},[2223,10563,10564],{"class":2229}," reactive",[2223,10566,4400],{"class":2328},[2223,10568,4535],{"class":2334},[2223,10570,10571],{"class":2233}," \"John Doe\"",[2223,10573,269],{"class":2328},[2223,10575,10576],{"class":2334},"age:",[2223,10578,10579],{"class":4463}," 30",[2223,10581,10582],{"class":2328}," });\n",[2223,10584,10585],{"class":2225,"line":2363},[2223,10586,2616],{"emptyLinePlaceholder":33},[2223,10588,10589],{"class":2225,"line":2074},[2223,10590,10591],{"class":2312},"// Computed property\n",[2223,10593,10594,10596,10599,10601,10603,10605,10607,10609,10611,10613,10616,10619],{"class":2225,"line":43},[2223,10595,3564],{"class":2900},[2223,10597,10598],{"class":2904}," doubledCount",[2223,10600,2909],{"class":2908},[2223,10602,3757],{"class":2229},[2223,10604,3760],{"class":2328},[2223,10606,3353],{"class":2900},[2223,10608,10540],{"class":2334},[2223,10610,260],{"class":2328},[2223,10612,3649],{"class":2334},[2223,10614,10615],{"class":2908}," *",[2223,10617,10618],{"class":4463}," 2",[2223,10620,3691],{"class":2328},[2223,10622,10623],{"class":2225,"line":2382},[2223,10624,2616],{"emptyLinePlaceholder":33},[2223,10626,10627],{"class":2225,"line":1784},[2223,10628,10629],{"class":2312},"// Watcher\n",[2223,10631,10632,10634,10636,10639,10642,10645,10647,10650,10652,10654],{"class":2225,"line":82},[2223,10633,6406],{"class":2229},[2223,10635,3001],{"class":2328},[2223,10637,10638],{"class":2334},"count",[2223,10640,10641],{"class":2328},", (",[2223,10643,10644],{"class":3131},"newVal",[2223,10646,269],{"class":2328},[2223,10648,10649],{"class":3131},"oldVal",[2223,10651,3350],{"class":2328},[2223,10653,3353],{"class":2900},[2223,10655,2379],{"class":2328},[2223,10657,10658,10661,10663,10666,10668,10671,10673,10675,10677,10680,10682,10684,10686,10688],{"class":2225,"line":1432},[2223,10659,10660],{"class":2334},"  console",[2223,10662,260],{"class":2328},[2223,10664,10665],{"class":2229},"log",[2223,10667,3001],{"class":2328},[2223,10669,10670],{"class":2233},"`Count changed from ",[2223,10672,3367],{"class":3366},[2223,10674,10649],{"class":2334},[2223,10676,3372],{"class":3366},[2223,10678,10679],{"class":2233}," to ",[2223,10681,3367],{"class":3366},[2223,10683,10644],{"class":2334},[2223,10685,3372],{"class":3366},[2223,10687,3654],{"class":2233},[2223,10689,3691],{"class":2328},[2223,10691,10692],{"class":2225,"line":369},[2223,10693,2658],{"class":2328},[2223,10695,10696],{"class":2225,"line":2425},[2223,10697,2616],{"emptyLinePlaceholder":33},[2223,10699,10700],{"class":2225,"line":1750},[2223,10701,10702],{"class":2312},"// watchEffect\n",[2223,10704,10705,10707,10709,10711],{"class":2225,"line":2105},[2223,10706,10456],{"class":2229},[2223,10708,3760],{"class":2328},[2223,10710,3353],{"class":2900},[2223,10712,2379],{"class":2328},[2223,10714,10715,10717,10719,10721,10723,10726,10728,10731,10733,10735,10737,10739],{"class":2225,"line":2449},[2223,10716,10660],{"class":2334},[2223,10718,260],{"class":2328},[2223,10720,10665],{"class":2229},[2223,10722,3001],{"class":2328},[2223,10724,10725],{"class":2233},"`Current user name: ",[2223,10727,3367],{"class":3366},[2223,10729,10730],{"class":2334},"user",[2223,10732,260],{"class":3646},[2223,10734,167],{"class":2334},[2223,10736,3372],{"class":3366},[2223,10738,3654],{"class":2233},[2223,10740,3691],{"class":2328},[2223,10742,10743],{"class":2225,"line":2454},[2223,10744,2658],{"class":2328},[2223,10746,10747],{"class":2225,"line":1839},[2223,10748,2616],{"emptyLinePlaceholder":33},[2223,10750,10751,10754,10757],{"class":2225,"line":2473},[2223,10752,10753],{"class":2900},"function",[2223,10755,10756],{"class":2229}," increment",[2223,10758,10759],{"class":2328},"() {\n",[2223,10761,10762,10765,10767,10769,10772],{"class":2225,"line":2483},[2223,10763,10764],{"class":2334},"  count",[2223,10766,260],{"class":2328},[2223,10768,3649],{"class":2334},[2223,10770,10771],{"class":2908},"++",[2223,10773,2889],{"class":2328},[2223,10775,10776],{"class":2225,"line":2493},[2223,10777,4487],{"class":2328},[2223,10779,10780,10782,10784],{"class":2225,"line":2504},[2223,10781,3813],{"class":3510},[2223,10783,3514],{"class":3513},[2223,10785,3530],{"class":3510},[16,10787,10789],{"id":10788},"_2-creating-reusable-logic-with-composables","2. Creating Reusable Logic with Composables",[12,10791,10792],{},"Composables are functions that encapsulate and reuse stateful logic using the Composition API. They are a powerful pattern for keeping your components lean and your logic organized and testable.",[190,10794,10795,10811],{},[193,10796,10797,10800,10801,10804,10805,269,10808,3707],{},[397,10798,10799],{},"Structure:"," A composable is typically a function named with the ",[2220,10802,10803],{},"use"," prefix (e.g., ",[2220,10806,10807],{},"useMousePosition",[2220,10809,10810],{},"useAuth",[193,10812,10813,10815],{},[397,10814,522],{}," Promotes code reuse, improves readability, and simplifies testing of reactive logic in isolation.",[12,10817,10818],{},[397,10819,10820,10821,2680],{},"Example (",[2220,10822,10823],{},"composables/useCounter.ts",[2214,10825,10827],{"className":2303,"code":10826,"language":2305,"meta":24,"style":24},"import { ref, computed } from \"vue\";\n\nexport function useCounter(initialValue = 0) {\n  const count = ref(initialValue);\n  const increment = () => count.value++;\n  const decrement = () => count.value--;\n  const double = computed(() => count.value * 2);\n\n  return { count, increment, decrement, double };\n}\n",[2220,10828,10829,10849,10853,10875,10891,10913,10937,10964,10968,10994],{"__ignoreMap":24},[2223,10830,10831,10833,10835,10837,10839,10841,10843,10845,10847],{"class":2225,"line":2226},[2223,10832,2871],{"class":2318},[2223,10834,2874],{"class":2328},[2223,10836,10419],{"class":2334},[2223,10838,269],{"class":2328},[2223,10840,10445],{"class":2334},[2223,10842,2880],{"class":2328},[2223,10844,2883],{"class":2318},[2223,10846,10522],{"class":2233},[2223,10848,2889],{"class":2328},[2223,10850,10851],{"class":2225,"line":28},[2223,10852,2616],{"emptyLinePlaceholder":33},[2223,10854,10855,10857,10860,10863,10865,10868,10870,10873],{"class":2225,"line":25},[2223,10856,2319],{"class":2318},[2223,10858,10859],{"class":2900}," function",[2223,10861,10862],{"class":2229}," useCounter",[2223,10864,3001],{"class":2328},[2223,10866,10867],{"class":3131},"initialValue",[2223,10869,2909],{"class":2908},[2223,10871,10872],{"class":4463}," 0",[2223,10874,4444],{"class":2328},[2223,10876,10877,10879,10881,10883,10885,10887,10889],{"class":2225,"line":2341},[2223,10878,5184],{"class":2900},[2223,10880,10540],{"class":2904},[2223,10882,2909],{"class":2908},[2223,10884,10545],{"class":2229},[2223,10886,3001],{"class":2328},[2223,10888,10867],{"class":2334},[2223,10890,3691],{"class":2328},[2223,10892,10893,10895,10897,10899,10901,10903,10905,10907,10909,10911],{"class":2225,"line":336},[2223,10894,5184],{"class":2900},[2223,10896,10756],{"class":2229},[2223,10898,2909],{"class":2908},[2223,10900,3664],{"class":2328},[2223,10902,3353],{"class":2900},[2223,10904,10540],{"class":2334},[2223,10906,260],{"class":2328},[2223,10908,3649],{"class":2334},[2223,10910,10771],{"class":2908},[2223,10912,2889],{"class":2328},[2223,10914,10915,10917,10920,10922,10924,10926,10928,10930,10932,10935],{"class":2225,"line":2357},[2223,10916,5184],{"class":2900},[2223,10918,10919],{"class":2229}," decrement",[2223,10921,2909],{"class":2908},[2223,10923,3664],{"class":2328},[2223,10925,3353],{"class":2900},[2223,10927,10540],{"class":2334},[2223,10929,260],{"class":2328},[2223,10931,3649],{"class":2334},[2223,10933,10934],{"class":2908},"--",[2223,10936,2889],{"class":2328},[2223,10938,10939,10941,10944,10946,10948,10950,10952,10954,10956,10958,10960,10962],{"class":2225,"line":2363},[2223,10940,5184],{"class":2900},[2223,10942,10943],{"class":2904}," double",[2223,10945,2909],{"class":2908},[2223,10947,3757],{"class":2229},[2223,10949,3760],{"class":2328},[2223,10951,3353],{"class":2900},[2223,10953,10540],{"class":2334},[2223,10955,260],{"class":2328},[2223,10957,3649],{"class":2334},[2223,10959,10615],{"class":2908},[2223,10961,10618],{"class":4463},[2223,10963,3691],{"class":2328},[2223,10965,10966],{"class":2225,"line":2074},[2223,10967,2616],{"emptyLinePlaceholder":33},[2223,10969,10970,10972,10974,10976,10978,10981,10983,10986,10988,10991],{"class":2225,"line":43},[2223,10971,3360],{"class":2318},[2223,10973,2874],{"class":2328},[2223,10975,10638],{"class":2334},[2223,10977,269],{"class":2328},[2223,10979,10980],{"class":2334},"increment",[2223,10982,269],{"class":2328},[2223,10984,10985],{"class":2334},"decrement",[2223,10987,269],{"class":2328},[2223,10989,10990],{"class":2334},"double",[2223,10992,10993],{"class":2328}," };\n",[2223,10995,10996],{"class":2225,"line":2382},[2223,10997,4487],{"class":2328},[12,10999,11000],{},[397,11001,11002],{},"Usage in a component:",[2214,11004,11006],{"className":3501,"code":11005,"language":3503,"meta":24,"style":24},"\u003Cscript setup lang=\"ts\">\nimport { useCounter } from \"@/composables/useCounter\";\n\nconst { count, increment, double } = useCounter(10);\n\u003C/script>\n",[2220,11007,11008,11024,11042,11046,11075],{"__ignoreMap":24},[2223,11009,11010,11012,11014,11016,11018,11020,11022],{"class":2225,"line":2226},[2223,11011,3113],{"class":3510},[2223,11013,3514],{"class":3513},[2223,11015,3518],{"class":3517},[2223,11017,3521],{"class":3517},[2223,11019,3524],{"class":2328},[2223,11021,3527],{"class":2233},[2223,11023,3530],{"class":3510},[2223,11025,11026,11028,11030,11033,11035,11037,11040],{"class":2225,"line":28},[2223,11027,2871],{"class":2318},[2223,11029,2874],{"class":2328},[2223,11031,11032],{"class":2334},"useCounter",[2223,11034,2880],{"class":2328},[2223,11036,2883],{"class":2318},[2223,11038,11039],{"class":2233}," \"@/composables/useCounter\"",[2223,11041,2889],{"class":2328},[2223,11043,11044],{"class":2225,"line":25},[2223,11045,2616],{"emptyLinePlaceholder":33},[2223,11047,11048,11050,11052,11054,11056,11058,11060,11062,11064,11066,11068,11070,11073],{"class":2225,"line":2341},[2223,11049,3564],{"class":2900},[2223,11051,2874],{"class":2328},[2223,11053,10638],{"class":2904},[2223,11055,269],{"class":2328},[2223,11057,10980],{"class":2904},[2223,11059,269],{"class":2328},[2223,11061,10990],{"class":2904},[2223,11063,2880],{"class":2328},[2223,11065,3524],{"class":2908},[2223,11067,10862],{"class":2229},[2223,11069,3001],{"class":2328},[2223,11071,11072],{"class":4463},"10",[2223,11074,3691],{"class":2328},[2223,11076,11077,11079,11081],{"class":2225,"line":336},[2223,11078,3813],{"class":3510},[2223,11080,3514],{"class":3513},[2223,11082,3530],{"class":3510},[16,11084,11086],{"id":11085},"_3-effective-state-management-with-pinia","3. Effective State Management with Pinia",[12,11088,11089],{},"Pinia is the official state management library for Vue 3, offering a simpler and more intuitive API than Vuex.",[116,11091,11093],{"id":11092},"setting-up-a-pinia-store","Setting Up a Pinia Store",[2214,11095,11097],{"className":2303,"code":11096,"language":2305,"meta":24,"style":24},"// stores/user.ts\nimport { defineStore } from 'pinia'\nimport { ref, computed } from 'vue'\n\nexport const useUserStore = defineStore('user', () => {\n  // State\n  const user = ref\u003CUser | null>(null)\n  const isLoading = ref(false)\n  \n  // Getters (computed)\n  const isAuthenticated = computed(() => !!user.value)\n  const userName = computed(() => user.value?.name ?? 'Guest')\n  \n  // Actions\n  async function login(credentials: LoginCredentials) {\n    isLoading.value = true\n    try {\n      const response = await api.login(credentials)\n      user.value = response.user\n    } catch (error) {\n      console.error('Login failed:', error)\n      throw error\n    } finally {\n      isLoading.value = false\n    }\n  }\n  \n  function logout() {\n    user.value = null\n  }\n  \n  return {\n    // State\n    user,\n    isLoading,\n    // Getters\n    isAuthenticated,\n    userName,\n    // Actions\n    login,\n    logout\n  }\n})\n",[2220,11098,11099,11104,11120,11139,11143,11168,11173,11200,11218,11222,11227,11253,11285,11289,11294,11315,11329,11336,11361,11379,11394,11414,11422,11431,11445,11449,11453,11457,11467,11481,11485,11489,11495,11500,11506,11512,11517,11524,11531,11536,11543,11548,11552],{"__ignoreMap":24},[2223,11100,11101],{"class":2225,"line":2226},[2223,11102,11103],{"class":2312},"// stores/user.ts\n",[2223,11105,11106,11108,11110,11113,11115,11117],{"class":2225,"line":28},[2223,11107,2871],{"class":2318},[2223,11109,2874],{"class":2328},[2223,11111,11112],{"class":2334},"defineStore",[2223,11114,2880],{"class":2328},[2223,11116,2883],{"class":2318},[2223,11118,11119],{"class":2233}," 'pinia'\n",[2223,11121,11122,11124,11126,11128,11130,11132,11134,11136],{"class":2225,"line":25},[2223,11123,2871],{"class":2318},[2223,11125,2874],{"class":2328},[2223,11127,10419],{"class":2334},[2223,11129,269],{"class":2328},[2223,11131,10445],{"class":2334},[2223,11133,2880],{"class":2328},[2223,11135,2883],{"class":2318},[2223,11137,11138],{"class":2233}," 'vue'\n",[2223,11140,11141],{"class":2225,"line":2341},[2223,11142,2616],{"emptyLinePlaceholder":33},[2223,11144,11145,11147,11149,11152,11154,11157,11159,11162,11164,11166],{"class":2225,"line":336},[2223,11146,2319],{"class":2318},[2223,11148,2901],{"class":2900},[2223,11150,11151],{"class":2904}," useUserStore",[2223,11153,2909],{"class":2908},[2223,11155,11156],{"class":2229}," defineStore",[2223,11158,3001],{"class":2328},[2223,11160,11161],{"class":2233},"'user'",[2223,11163,4378],{"class":2328},[2223,11165,3353],{"class":2900},[2223,11167,2379],{"class":2328},[2223,11169,11170],{"class":2225,"line":2357},[2223,11171,11172],{"class":2312},"  // State\n",[2223,11174,11175,11177,11179,11181,11183,11185,11188,11190,11192,11195,11198],{"class":2225,"line":2363},[2223,11176,5184],{"class":2900},[2223,11178,10559],{"class":2904},[2223,11180,2909],{"class":2908},[2223,11182,10545],{"class":2229},[2223,11184,3113],{"class":2328},[2223,11186,11187],{"class":3100},"User",[2223,11189,5229],{"class":2908},[2223,11191,5232],{"class":3137},[2223,11193,11194],{"class":2328},">(",[2223,11196,11197],{"class":2546},"null",[2223,11199,4947],{"class":2328},[2223,11201,11202,11204,11207,11209,11211,11213,11216],{"class":2225,"line":2074},[2223,11203,5184],{"class":2900},[2223,11205,11206],{"class":2904}," isLoading",[2223,11208,2909],{"class":2908},[2223,11210,10545],{"class":2229},[2223,11212,3001],{"class":2328},[2223,11214,11215],{"class":2546},"false",[2223,11217,4947],{"class":2328},[2223,11219,11220],{"class":2225,"line":43},[2223,11221,2371],{"class":2328},[2223,11223,11224],{"class":2225,"line":2382},[2223,11225,11226],{"class":2312},"  // Getters (computed)\n",[2223,11228,11229,11231,11234,11236,11238,11240,11242,11245,11247,11249,11251],{"class":2225,"line":1784},[2223,11230,5184],{"class":2900},[2223,11232,11233],{"class":2904}," isAuthenticated",[2223,11235,2909],{"class":2908},[2223,11237,3757],{"class":2229},[2223,11239,3760],{"class":2328},[2223,11241,3353],{"class":2900},[2223,11243,11244],{"class":2908}," !!",[2223,11246,10730],{"class":2334},[2223,11248,260],{"class":2328},[2223,11250,3649],{"class":2334},[2223,11252,4947],{"class":2328},[2223,11254,11255,11257,11260,11262,11264,11266,11268,11270,11272,11274,11276,11278,11280,11283],{"class":2225,"line":82},[2223,11256,5184],{"class":2900},[2223,11258,11259],{"class":2904}," userName",[2223,11261,2909],{"class":2908},[2223,11263,3757],{"class":2229},[2223,11265,3760],{"class":2328},[2223,11267,3353],{"class":2900},[2223,11269,10559],{"class":2334},[2223,11271,260],{"class":2328},[2223,11273,3649],{"class":2334},[2223,11275,3777],{"class":2328},[2223,11277,167],{"class":2334},[2223,11279,5356],{"class":2908},[2223,11281,11282],{"class":2233}," 'Guest'",[2223,11284,4947],{"class":2328},[2223,11286,11287],{"class":2225,"line":1432},[2223,11288,2371],{"class":2328},[2223,11290,11291],{"class":2225,"line":369},[2223,11292,11293],{"class":2312},"  // Actions\n",[2223,11295,11296,11298,11300,11303,11305,11308,11310,11313],{"class":2225,"line":2425},[2223,11297,3661],{"class":2900},[2223,11299,10859],{"class":2900},[2223,11301,11302],{"class":2229}," login",[2223,11304,3001],{"class":2328},[2223,11306,11307],{"class":3131},"credentials",[2223,11309,2300],{"class":2908},[2223,11311,11312],{"class":3100}," LoginCredentials",[2223,11314,4444],{"class":2328},[2223,11316,11317,11320,11322,11324,11326],{"class":2225,"line":1750},[2223,11318,11319],{"class":2334},"    isLoading",[2223,11321,260],{"class":2328},[2223,11323,3649],{"class":2334},[2223,11325,2909],{"class":2908},[2223,11327,11328],{"class":2546}," true\n",[2223,11330,11331,11334],{"class":2225,"line":2105},[2223,11332,11333],{"class":2318},"    try",[2223,11335,2379],{"class":2328},[2223,11337,11338,11340,11343,11345,11347,11350,11352,11355,11357,11359],{"class":2225,"line":2449},[2223,11339,5279],{"class":2900},[2223,11341,11342],{"class":2904}," response",[2223,11344,2909],{"class":2908},[2223,11346,3623],{"class":2318},[2223,11348,11349],{"class":2334}," api",[2223,11351,260],{"class":2328},[2223,11353,11354],{"class":2229},"login",[2223,11356,3001],{"class":2328},[2223,11358,11307],{"class":2334},[2223,11360,4947],{"class":2328},[2223,11362,11363,11366,11368,11370,11372,11374,11376],{"class":2225,"line":2454},[2223,11364,11365],{"class":2334},"      user",[2223,11367,260],{"class":2328},[2223,11369,3649],{"class":2334},[2223,11371,2909],{"class":2908},[2223,11373,11342],{"class":2334},[2223,11375,260],{"class":2328},[2223,11377,11378],{"class":2334},"user\n",[2223,11380,11381,11384,11387,11389,11392],{"class":2225,"line":1839},[2223,11382,11383],{"class":2328},"    } ",[2223,11385,11386],{"class":2318},"catch",[2223,11388,3340],{"class":2328},[2223,11390,11391],{"class":2334},"error",[2223,11393,4444],{"class":2328},[2223,11395,11396,11399,11401,11403,11405,11408,11410,11412],{"class":2225,"line":2473},[2223,11397,11398],{"class":2334},"      console",[2223,11400,260],{"class":2328},[2223,11402,11391],{"class":2229},[2223,11404,3001],{"class":2328},[2223,11406,11407],{"class":2233},"'Login failed:'",[2223,11409,269],{"class":2328},[2223,11411,11391],{"class":2334},[2223,11413,4947],{"class":2328},[2223,11415,11416,11419],{"class":2225,"line":2483},[2223,11417,11418],{"class":2318},"      throw",[2223,11420,11421],{"class":2334}," error\n",[2223,11423,11424,11426,11429],{"class":2225,"line":2493},[2223,11425,11383],{"class":2328},[2223,11427,11428],{"class":2318},"finally",[2223,11430,2379],{"class":2328},[2223,11432,11433,11436,11438,11440,11442],{"class":2225,"line":2504},[2223,11434,11435],{"class":2334},"      isLoading",[2223,11437,260],{"class":2328},[2223,11439,3649],{"class":2334},[2223,11441,2909],{"class":2908},[2223,11443,11444],{"class":2546}," false\n",[2223,11446,11447],{"class":2225,"line":2510},[2223,11448,2604],{"class":2328},[2223,11450,11451],{"class":2225,"line":2516},[2223,11452,2652],{"class":2328},[2223,11454,11455],{"class":2225,"line":2526},[2223,11456,2371],{"class":2328},[2223,11458,11459,11462,11465],{"class":2225,"line":2540},[2223,11460,11461],{"class":2900},"  function",[2223,11463,11464],{"class":2229}," logout",[2223,11466,10759],{"class":2328},[2223,11468,11469,11472,11474,11476,11478],{"class":2225,"line":2552},[2223,11470,11471],{"class":2334},"    user",[2223,11473,260],{"class":2328},[2223,11475,3649],{"class":2334},[2223,11477,2909],{"class":2908},[2223,11479,11480],{"class":2546}," null\n",[2223,11482,11483],{"class":2225,"line":2563},[2223,11484,2652],{"class":2328},[2223,11486,11487],{"class":2225,"line":2571},[2223,11488,2371],{"class":2328},[2223,11490,11491,11493],{"class":2225,"line":2581},[2223,11492,3360],{"class":2318},[2223,11494,2379],{"class":2328},[2223,11496,11497],{"class":2225,"line":2592},[2223,11498,11499],{"class":2312},"    // State\n",[2223,11501,11502,11504],{"class":2225,"line":2601},[2223,11503,11471],{"class":2334},[2223,11505,2347],{"class":2328},[2223,11507,11508,11510],{"class":2225,"line":2607},[2223,11509,11319],{"class":2334},[2223,11511,2347],{"class":2328},[2223,11513,11514],{"class":2225,"line":2613},[2223,11515,11516],{"class":2312},"    // Getters\n",[2223,11518,11519,11522],{"class":2225,"line":2619},[2223,11520,11521],{"class":2334},"    isAuthenticated",[2223,11523,2347],{"class":2328},[2223,11525,11526,11529],{"class":2225,"line":2627},[2223,11527,11528],{"class":2334},"    userName",[2223,11530,2347],{"class":2328},[2223,11532,11533],{"class":2225,"line":2635},[2223,11534,11535],{"class":2312},"    // Actions\n",[2223,11537,11538,11541],{"class":2225,"line":2644},[2223,11539,11540],{"class":2334},"    login",[2223,11542,2347],{"class":2328},[2223,11544,11545],{"class":2225,"line":2649},[2223,11546,11547],{"class":2334},"    logout\n",[2223,11549,11550],{"class":2225,"line":2655},[2223,11551,2652],{"class":2328},[2223,11553,11554],{"class":2225,"line":3384},[2223,11555,11556],{"class":2328},"})\n",[116,11558,11560],{"id":11559},"using-pinia-in-components","Using Pinia in Components",[2214,11562,11564],{"className":3501,"code":11563,"language":3503,"meta":24,"style":24},"\u003Cscript setup lang=\"ts\">\nimport { useUserStore } from '@/stores/user'\nimport { storeToRefs } from 'pinia'\n\nconst userStore = useUserStore()\n// Extract reactive state using storeToRefs\nconst { user, isAuthenticated, userName } = storeToRefs(userStore)\n// Actions can be destructured directly\nconst { login, logout } = userStore\n\nasync function handleLogin() {\n  try {\n    await login({ email: 'user@example.com', password: 'password' })\n  } catch (error) {\n    // Handle error\n  }\n}\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cdiv v-if=\"isAuthenticated\">\n    \u003Cp>Welcome, {{ userName }}!\u003C/p>\n    \u003Cbutton @click=\"logout\">Logout\u003C/button>\n  \u003C/div>\n  \u003Cdiv v-else>\n    \u003Cbutton @click=\"handleLogin\">Login\u003C/button>\n  \u003C/div>\n\u003C/template>\n",[2220,11565,11566,11582,11598,11613,11617,11630,11635,11667,11672,11692,11696,11708,11715,11740,11753,11758,11762,11766,11774,11778,11786,11805,11827,11859,11867,11878,11908,11916],{"__ignoreMap":24},[2223,11567,11568,11570,11572,11574,11576,11578,11580],{"class":2225,"line":2226},[2223,11569,3113],{"class":3510},[2223,11571,3514],{"class":3513},[2223,11573,3518],{"class":3517},[2223,11575,3521],{"class":3517},[2223,11577,3524],{"class":2328},[2223,11579,3527],{"class":2233},[2223,11581,3530],{"class":3510},[2223,11583,11584,11586,11588,11591,11593,11595],{"class":2225,"line":28},[2223,11585,2871],{"class":2318},[2223,11587,2874],{"class":2328},[2223,11589,11590],{"class":2334},"useUserStore",[2223,11592,2880],{"class":2328},[2223,11594,2883],{"class":2318},[2223,11596,11597],{"class":2233}," '@/stores/user'\n",[2223,11599,11600,11602,11604,11607,11609,11611],{"class":2225,"line":25},[2223,11601,2871],{"class":2318},[2223,11603,2874],{"class":2328},[2223,11605,11606],{"class":2334},"storeToRefs",[2223,11608,2880],{"class":2328},[2223,11610,2883],{"class":2318},[2223,11612,11119],{"class":2233},[2223,11614,11615],{"class":2225,"line":2341},[2223,11616,2616],{"emptyLinePlaceholder":33},[2223,11618,11619,11621,11624,11626,11628],{"class":2225,"line":336},[2223,11620,3564],{"class":2900},[2223,11622,11623],{"class":2904}," userStore",[2223,11625,2909],{"class":2908},[2223,11627,11151],{"class":2229},[2223,11629,4389],{"class":2328},[2223,11631,11632],{"class":2225,"line":2357},[2223,11633,11634],{"class":2312},"// Extract reactive state using storeToRefs\n",[2223,11636,11637,11639,11641,11643,11645,11648,11650,11653,11655,11657,11660,11662,11665],{"class":2225,"line":2363},[2223,11638,3564],{"class":2900},[2223,11640,2874],{"class":2328},[2223,11642,10730],{"class":2904},[2223,11644,269],{"class":2328},[2223,11646,11647],{"class":2904},"isAuthenticated",[2223,11649,269],{"class":2328},[2223,11651,11652],{"class":2904},"userName",[2223,11654,2880],{"class":2328},[2223,11656,3524],{"class":2908},[2223,11658,11659],{"class":2229}," storeToRefs",[2223,11661,3001],{"class":2328},[2223,11663,11664],{"class":2334},"userStore",[2223,11666,4947],{"class":2328},[2223,11668,11669],{"class":2225,"line":2074},[2223,11670,11671],{"class":2312},"// Actions can be destructured directly\n",[2223,11673,11674,11676,11678,11680,11682,11685,11687,11689],{"class":2225,"line":43},[2223,11675,3564],{"class":2900},[2223,11677,2874],{"class":2328},[2223,11679,11354],{"class":2904},[2223,11681,269],{"class":2328},[2223,11683,11684],{"class":2904},"logout",[2223,11686,2880],{"class":2328},[2223,11688,3524],{"class":2908},[2223,11690,11691],{"class":2334}," userStore\n",[2223,11693,11694],{"class":2225,"line":2382},[2223,11695,2616],{"emptyLinePlaceholder":33},[2223,11697,11698,11701,11703,11706],{"class":2225,"line":1784},[2223,11699,11700],{"class":2900},"async",[2223,11702,10859],{"class":2900},[2223,11704,11705],{"class":2229}," handleLogin",[2223,11707,10759],{"class":2328},[2223,11709,11710,11713],{"class":2225,"line":82},[2223,11711,11712],{"class":2318},"  try",[2223,11714,2379],{"class":2328},[2223,11716,11717,11720,11722,11724,11727,11730,11732,11735,11738],{"class":2225,"line":1432},[2223,11718,11719],{"class":2318},"    await",[2223,11721,11302],{"class":2229},[2223,11723,4400],{"class":2328},[2223,11725,11726],{"class":2334},"email:",[2223,11728,11729],{"class":2233}," 'user@example.com'",[2223,11731,269],{"class":2328},[2223,11733,11734],{"class":2334},"password:",[2223,11736,11737],{"class":2233}," 'password'",[2223,11739,4408],{"class":2328},[2223,11741,11742,11745,11747,11749,11751],{"class":2225,"line":369},[2223,11743,11744],{"class":2328},"  } ",[2223,11746,11386],{"class":2318},[2223,11748,3340],{"class":2328},[2223,11750,11391],{"class":2334},[2223,11752,4444],{"class":2328},[2223,11754,11755],{"class":2225,"line":2425},[2223,11756,11757],{"class":2312},"    // Handle error\n",[2223,11759,11760],{"class":2225,"line":1750},[2223,11761,2652],{"class":2328},[2223,11763,11764],{"class":2225,"line":2105},[2223,11765,4487],{"class":2328},[2223,11767,11768,11770,11772],{"class":2225,"line":2449},[2223,11769,3813],{"class":3510},[2223,11771,3514],{"class":3513},[2223,11773,3530],{"class":3510},[2223,11775,11776],{"class":2225,"line":2454},[2223,11777,2616],{"emptyLinePlaceholder":33},[2223,11779,11780,11782,11784],{"class":2225,"line":1839},[2223,11781,3113],{"class":3510},[2223,11783,3828],{"class":3513},[2223,11785,3530],{"class":3510},[2223,11787,11788,11790,11792,11795,11797,11799,11801,11803],{"class":2225,"line":2473},[2223,11789,3835],{"class":3510},[2223,11791,3917],{"class":3513},[2223,11793,11794],{"class":2318}," v-if",[2223,11796,3524],{"class":2328},[2223,11798,3944],{"class":3646},[2223,11800,11647],{"class":2334},[2223,11802,3944],{"class":3646},[2223,11804,3530],{"class":3510},[2223,11806,11807,11809,11811,11813,11816,11818,11821,11823,11825],{"class":2225,"line":2483},[2223,11808,3845],{"class":3510},[2223,11810,12],{"class":3513},[2223,11812,4117],{"class":3510},[2223,11814,11815],{"class":2328},"Welcome, {{ ",[2223,11817,11652],{"class":2334},[2223,11819,11820],{"class":2328}," }}!",[2223,11822,3813],{"class":3510},[2223,11824,12],{"class":3513},[2223,11826,3530],{"class":3510},[2223,11828,11829,11831,11834,11837,11840,11842,11844,11846,11848,11850,11853,11855,11857],{"class":2225,"line":2493},[2223,11830,3845],{"class":3510},[2223,11832,11833],{"class":3513},"button",[2223,11835,11836],{"class":2328}," @",[2223,11838,11839],{"class":3517},"click",[2223,11841,3524],{"class":2328},[2223,11843,3944],{"class":3646},[2223,11845,11684],{"class":2334},[2223,11847,3944],{"class":3646},[2223,11849,4117],{"class":3510},[2223,11851,11852],{"class":2328},"Logout",[2223,11854,3813],{"class":3510},[2223,11856,11833],{"class":3513},[2223,11858,3530],{"class":3510},[2223,11860,11861,11863,11865],{"class":2225,"line":2504},[2223,11862,4208],{"class":3510},[2223,11864,3917],{"class":3513},[2223,11866,3530],{"class":3510},[2223,11868,11869,11871,11873,11876],{"class":2225,"line":2510},[2223,11870,3835],{"class":3510},[2223,11872,3917],{"class":3513},[2223,11874,11875],{"class":2318}," v-else",[2223,11877,3530],{"class":3510},[2223,11879,11880,11882,11884,11886,11888,11890,11892,11895,11897,11899,11902,11904,11906],{"class":2225,"line":2516},[2223,11881,3845],{"class":3510},[2223,11883,11833],{"class":3513},[2223,11885,11836],{"class":2328},[2223,11887,11839],{"class":3517},[2223,11889,3524],{"class":2328},[2223,11891,3944],{"class":3646},[2223,11893,11894],{"class":2334},"handleLogin",[2223,11896,3944],{"class":3646},[2223,11898,4117],{"class":3510},[2223,11900,11901],{"class":2328},"Login",[2223,11903,3813],{"class":3510},[2223,11905,11833],{"class":3513},[2223,11907,3530],{"class":3510},[2223,11909,11910,11912,11914],{"class":2225,"line":2526},[2223,11911,4208],{"class":3510},[2223,11913,3917],{"class":3513},[2223,11915,3530],{"class":3510},[2223,11917,11918,11920,11922],{"class":2225,"line":2540},[2223,11919,3813],{"class":3510},[2223,11921,3828],{"class":3513},[2223,11923,3530],{"class":3510},[116,11925,11927],{"id":11926},"provideinject-for-localized-state","Provide/Inject for Localized State",[12,11929,11930],{},"For component-tree-specific state, use provide/inject:",[2214,11932,11934],{"className":3501,"code":11933,"language":3503,"meta":24,"style":24},"\u003C!-- Parent Component -->\n\u003Cscript setup lang=\"ts\">\nimport { provide, ref } from 'vue'\n\nconst theme = ref('dark')\nprovide('theme', theme)\n\nfunction toggleTheme() {\n  theme.value = theme.value === 'dark' ? 'light' : 'dark'\n}\n\u003C/script>\n\n\u003C!-- Child Component (any depth) -->\n\u003Cscript setup lang=\"ts\">\nimport { inject, type Ref } from 'vue'\n\nconst theme = inject\u003CRef\u003Cstring>>('theme')\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cdiv :class=\"`theme-${theme}`\">\n    Content with injected theme\n  \u003C/div>\n\u003C/template>\n",[2220,11935,11936,11941,11957,11976,11980,11998,12014,12018,12027,12059,12063,12071,12075,12080,12096,12118,12122,12149,12157,12161,12169,12199,12204,12212],{"__ignoreMap":24},[2223,11937,11938],{"class":2225,"line":2226},[2223,11939,11940],{"class":2312},"\u003C!-- Parent Component -->\n",[2223,11942,11943,11945,11947,11949,11951,11953,11955],{"class":2225,"line":28},[2223,11944,3113],{"class":3510},[2223,11946,3514],{"class":3513},[2223,11948,3518],{"class":3517},[2223,11950,3521],{"class":3517},[2223,11952,3524],{"class":2328},[2223,11954,3527],{"class":2233},[2223,11956,3530],{"class":3510},[2223,11958,11959,11961,11963,11966,11968,11970,11972,11974],{"class":2225,"line":25},[2223,11960,2871],{"class":2318},[2223,11962,2874],{"class":2328},[2223,11964,11965],{"class":2334},"provide",[2223,11967,269],{"class":2328},[2223,11969,10419],{"class":2334},[2223,11971,2880],{"class":2328},[2223,11973,2883],{"class":2318},[2223,11975,11138],{"class":2233},[2223,11977,11978],{"class":2225,"line":2341},[2223,11979,2616],{"emptyLinePlaceholder":33},[2223,11981,11982,11984,11987,11989,11991,11993,11996],{"class":2225,"line":336},[2223,11983,3564],{"class":2900},[2223,11985,11986],{"class":2904}," theme",[2223,11988,2909],{"class":2908},[2223,11990,10545],{"class":2229},[2223,11992,3001],{"class":2328},[2223,11994,11995],{"class":2233},"'dark'",[2223,11997,4947],{"class":2328},[2223,11999,12000,12002,12004,12007,12009,12012],{"class":2225,"line":2357},[2223,12001,11965],{"class":2229},[2223,12003,3001],{"class":2328},[2223,12005,12006],{"class":2233},"'theme'",[2223,12008,269],{"class":2328},[2223,12010,12011],{"class":2334},"theme",[2223,12013,4947],{"class":2328},[2223,12015,12016],{"class":2225,"line":2363},[2223,12017,2616],{"emptyLinePlaceholder":33},[2223,12019,12020,12022,12025],{"class":2225,"line":2074},[2223,12021,10753],{"class":2900},[2223,12023,12024],{"class":2229}," toggleTheme",[2223,12026,10759],{"class":2328},[2223,12028,12029,12032,12034,12036,12038,12040,12042,12044,12046,12049,12051,12054,12056],{"class":2225,"line":43},[2223,12030,12031],{"class":2334},"  theme",[2223,12033,260],{"class":2328},[2223,12035,3649],{"class":2334},[2223,12037,2909],{"class":2908},[2223,12039,11986],{"class":2334},[2223,12041,260],{"class":2328},[2223,12043,3649],{"class":2334},[2223,12045,5697],{"class":2908},[2223,12047,12048],{"class":2233}," 'dark'",[2223,12050,5703],{"class":2908},[2223,12052,12053],{"class":2233}," 'light'",[2223,12055,4762],{"class":2908},[2223,12057,12058],{"class":2233}," 'dark'\n",[2223,12060,12061],{"class":2225,"line":2382},[2223,12062,4487],{"class":2328},[2223,12064,12065,12067,12069],{"class":2225,"line":1784},[2223,12066,3813],{"class":3510},[2223,12068,3514],{"class":3513},[2223,12070,3530],{"class":3510},[2223,12072,12073],{"class":2225,"line":82},[2223,12074,2616],{"emptyLinePlaceholder":33},[2223,12076,12077],{"class":2225,"line":1432},[2223,12078,12079],{"class":2312},"\u003C!-- Child Component (any depth) -->\n",[2223,12081,12082,12084,12086,12088,12090,12092,12094],{"class":2225,"line":369},[2223,12083,3113],{"class":3510},[2223,12085,3514],{"class":3513},[2223,12087,3518],{"class":3517},[2223,12089,3521],{"class":3517},[2223,12091,3524],{"class":2328},[2223,12093,3527],{"class":2233},[2223,12095,3530],{"class":3510},[2223,12097,12098,12100,12102,12105,12107,12109,12112,12114,12116],{"class":2225,"line":2425},[2223,12099,2871],{"class":2318},[2223,12101,2874],{"class":2328},[2223,12103,12104],{"class":2334},"inject",[2223,12106,269],{"class":2328},[2223,12108,3544],{"class":2318},[2223,12110,12111],{"class":2334}," Ref",[2223,12113,2880],{"class":2328},[2223,12115,2883],{"class":2318},[2223,12117,11138],{"class":2233},[2223,12119,12120],{"class":2225,"line":1750},[2223,12121,2616],{"emptyLinePlaceholder":33},[2223,12123,12124,12126,12128,12130,12133,12135,12138,12140,12142,12145,12147],{"class":2225,"line":2105},[2223,12125,3564],{"class":2900},[2223,12127,11986],{"class":2904},[2223,12129,2909],{"class":2908},[2223,12131,12132],{"class":2229}," inject",[2223,12134,3113],{"class":2328},[2223,12136,12137],{"class":3100},"Ref",[2223,12139,3113],{"class":2328},[2223,12141,2931],{"class":3137},[2223,12143,12144],{"class":2328},">>(",[2223,12146,12006],{"class":2233},[2223,12148,4947],{"class":2328},[2223,12150,12151,12153,12155],{"class":2225,"line":2449},[2223,12152,3813],{"class":3510},[2223,12154,3514],{"class":3513},[2223,12156,3530],{"class":3510},[2223,12158,12159],{"class":2225,"line":2454},[2223,12160,2616],{"emptyLinePlaceholder":33},[2223,12162,12163,12165,12167],{"class":2225,"line":1839},[2223,12164,3113],{"class":3510},[2223,12166,3828],{"class":3513},[2223,12168,3530],{"class":3510},[2223,12170,12171,12173,12175,12177,12180,12182,12184,12187,12189,12191,12193,12195,12197],{"class":2225,"line":2473},[2223,12172,3835],{"class":3510},[2223,12174,3917],{"class":3513},[2223,12176,4762],{"class":2328},[2223,12178,12179],{"class":3517},"class",[2223,12181,3524],{"class":2328},[2223,12183,3944],{"class":3646},[2223,12185,12186],{"class":2233},"`theme-",[2223,12188,3367],{"class":3366},[2223,12190,12011],{"class":2334},[2223,12192,3372],{"class":3366},[2223,12194,3654],{"class":2233},[2223,12196,3944],{"class":3646},[2223,12198,3530],{"class":3510},[2223,12200,12201],{"class":2225,"line":2483},[2223,12202,12203],{"class":2328},"    Content with injected theme\n",[2223,12205,12206,12208,12210],{"class":2225,"line":2493},[2223,12207,4208],{"class":3510},[2223,12209,3917],{"class":3513},[2223,12211,3530],{"class":3510},[2223,12213,12214,12216,12218],{"class":2225,"line":2504},[2223,12215,3813],{"class":3510},[2223,12217,3828],{"class":3513},[2223,12219,3530],{"class":3510},[16,12221,12223,12224],{"id":12222},"_4-leveraging-script-setup","4. Leveraging ",[2220,12225,12226],{},"\u003Cscript setup>",[12,12228,12229,12230,12232],{},"The ",[2220,12231,12226],{}," syntax is a compile-time syntactic sugar that significantly simplifies component writing with the Composition API.",[190,12234,12235,12247],{},[193,12236,12237,12239,12240,269,12242,12244,12245,260],{},[397,12238,522],{}," More concise code, auto-import of components and composables (in Nuxt), direct use of ",[2220,12241,10419],{},[2220,12243,10423],{},", etc., without returning them from ",[2220,12246,10409],{},[193,12248,12249,12252,12253,10420,12256,12259],{},[397,12250,12251],{},"Defining Props and Emits:"," Use ",[2220,12254,12255],{},"defineProps",[2220,12257,12258],{},"defineEmits"," macros.",[16,12261,12263],{"id":12262},"_5-asynchronous-operations-and-suspense","5. Asynchronous Operations and Suspense",[12,12265,12266],{},"Vue 3 provides better ways to handle asynchronous operations and loading states.",[190,12268,12269,12278],{},[193,12270,12271,12252,12274,12277],{},[397,12272,12273],{},"Async Components:",[2220,12275,12276],{},"defineAsyncComponent"," to lazy-load components, improving initial page load time.",[193,12279,12280,12283,12284,12287,12288,12290],{},[397,12281,12282],{},"Suspense:"," The ",[2220,12285,12286],{},"\u003CSuspense>"," component allows you to display fallback content while waiting for an async component or an async ",[2220,12289,10409],{}," function to resolve. This simplifies managing loading states for nested async dependencies.",[2214,12292,12294],{"className":3501,"code":12293,"language":3503,"meta":24,"style":24},"\u003Ctemplate>\n  \u003CSuspense>\n    \u003Ctemplate #default>\n      \u003CAsyncUserProfile />\n    \u003C/template>\n    \u003Ctemplate #fallback>\n      \u003Cdiv>Loading profile...\u003C/div>\n    \u003C/template>\n  \u003C/Suspense>\n\u003C/template>\n\n\u003Cscript setup lang=\"ts\">\nimport { defineAsyncComponent } from \"vue\";\nconst AsyncUserProfile = defineAsyncComponent(\n  () => import(\"./UserProfile.vue\")\n);\n\u003C/script>\n",[2220,12295,12296,12304,12313,12327,12336,12344,12357,12374,12382,12390,12398,12402,12418,12434,12448,12464,12468],{"__ignoreMap":24},[2223,12297,12298,12300,12302],{"class":2225,"line":2226},[2223,12299,3113],{"class":3510},[2223,12301,3828],{"class":3513},[2223,12303,3530],{"class":3510},[2223,12305,12306,12308,12311],{"class":2225,"line":28},[2223,12307,3835],{"class":3510},[2223,12309,12310],{"class":3513},"Suspense",[2223,12312,3530],{"class":3510},[2223,12314,12315,12317,12319,12322,12325],{"class":2225,"line":25},[2223,12316,3845],{"class":3510},[2223,12318,3828],{"class":3513},[2223,12320,12321],{"class":2328}," #",[2223,12323,12324],{"class":3517},"default",[2223,12326,3530],{"class":3510},[2223,12328,12329,12331,12334],{"class":2225,"line":2341},[2223,12330,3863],{"class":3510},[2223,12332,12333],{"class":3513},"AsyncUserProfile",[2223,12335,4775],{"class":3510},[2223,12337,12338,12340,12342],{"class":2225,"line":336},[2223,12339,4199],{"class":3510},[2223,12341,3828],{"class":3513},[2223,12343,3530],{"class":3510},[2223,12345,12346,12348,12350,12352,12355],{"class":2225,"line":2357},[2223,12347,3845],{"class":3510},[2223,12349,3828],{"class":3513},[2223,12351,12321],{"class":2328},[2223,12353,12354],{"class":3517},"fallback",[2223,12356,3530],{"class":3510},[2223,12358,12359,12361,12363,12365,12368,12370,12372],{"class":2225,"line":2363},[2223,12360,3863],{"class":3510},[2223,12362,3917],{"class":3513},[2223,12364,4117],{"class":3510},[2223,12366,12367],{"class":2328},"Loading profile...",[2223,12369,3813],{"class":3510},[2223,12371,3917],{"class":3513},[2223,12373,3530],{"class":3510},[2223,12375,12376,12378,12380],{"class":2225,"line":2074},[2223,12377,4199],{"class":3510},[2223,12379,3828],{"class":3513},[2223,12381,3530],{"class":3510},[2223,12383,12384,12386,12388],{"class":2225,"line":43},[2223,12385,4208],{"class":3510},[2223,12387,12310],{"class":3513},[2223,12389,3530],{"class":3510},[2223,12391,12392,12394,12396],{"class":2225,"line":2382},[2223,12393,3813],{"class":3510},[2223,12395,3828],{"class":3513},[2223,12397,3530],{"class":3510},[2223,12399,12400],{"class":2225,"line":1784},[2223,12401,2616],{"emptyLinePlaceholder":33},[2223,12403,12404,12406,12408,12410,12412,12414,12416],{"class":2225,"line":82},[2223,12405,3113],{"class":3510},[2223,12407,3514],{"class":3513},[2223,12409,3518],{"class":3517},[2223,12411,3521],{"class":3517},[2223,12413,3524],{"class":2328},[2223,12415,3527],{"class":2233},[2223,12417,3530],{"class":3510},[2223,12419,12420,12422,12424,12426,12428,12430,12432],{"class":2225,"line":1432},[2223,12421,2871],{"class":2318},[2223,12423,2874],{"class":2328},[2223,12425,12276],{"class":2334},[2223,12427,2880],{"class":2328},[2223,12429,2883],{"class":2318},[2223,12431,10522],{"class":2233},[2223,12433,2889],{"class":2328},[2223,12435,12436,12438,12441,12443,12446],{"class":2225,"line":369},[2223,12437,3564],{"class":2900},[2223,12439,12440],{"class":2904}," AsyncUserProfile",[2223,12442,2909],{"class":2908},[2223,12444,12445],{"class":2229}," defineAsyncComponent",[2223,12447,6160],{"class":2328},[2223,12449,12450,12452,12454,12457,12459,12462],{"class":2225,"line":2425},[2223,12451,6184],{"class":2328},[2223,12453,3353],{"class":2900},[2223,12455,12456],{"class":2900}," import",[2223,12458,3001],{"class":2328},[2223,12460,12461],{"class":2233},"\"./UserProfile.vue\"",[2223,12463,4947],{"class":2328},[2223,12465,12466],{"class":2225,"line":1750},[2223,12467,3691],{"class":2328},[2223,12469,12470,12472,12474],{"class":2225,"line":2105},[2223,12471,3813],{"class":3510},[2223,12473,3514],{"class":3513},[2223,12475,3530],{"class":3510},[16,12477,12479],{"id":12478},"_6-graceful-dom-manipulation-with-teleport","6. Graceful DOM Manipulation with Teleport",[12,12481,12229,12482,12485],{},[2220,12483,12484],{},"\u003CTeleport>"," component allows you to render a part of a component's template into a different DOM location, outside of the component's own DOM hierarchy. This is extremely useful for modals, notifications, tooltips, or any element that needs to break out of its parent's styling context or stacking order.",[2214,12487,12489],{"className":3501,"code":12488,"language":3503,"meta":24,"style":24},"\u003Ctemplate>\n  \u003Cbutton @click=\"showModal = true\">Show Modal\u003C/button>\n  \u003CTeleport to=\"body\">\n    \u003Cdiv v-if=\"showModal\" class=\"modal\">\n      \u003Cp>This is a modal!\u003C/p>\n      \u003Cbutton @click=\"showModal = false\">Close\u003C/button>\n    \u003C/div>\n  \u003C/Teleport>\n\u003C/template>\n\n\u003Cscript setup lang=\"ts\">\nimport { ref } from \"vue\";\nconst showModal = ref(false);\n\u003C/script>\n",[2220,12490,12491,12499,12533,12550,12575,12592,12626,12634,12642,12650,12654,12670,12686,12703],{"__ignoreMap":24},[2223,12492,12493,12495,12497],{"class":2225,"line":2226},[2223,12494,3113],{"class":3510},[2223,12496,3828],{"class":3513},[2223,12498,3530],{"class":3510},[2223,12500,12501,12503,12505,12507,12509,12511,12513,12516,12518,12520,12522,12524,12527,12529,12531],{"class":2225,"line":28},[2223,12502,3835],{"class":3510},[2223,12504,11833],{"class":3513},[2223,12506,11836],{"class":2328},[2223,12508,11839],{"class":3517},[2223,12510,3524],{"class":2328},[2223,12512,3944],{"class":3646},[2223,12514,12515],{"class":2334},"showModal",[2223,12517,2909],{"class":2908},[2223,12519,2547],{"class":2546},[2223,12521,3944],{"class":3646},[2223,12523,4117],{"class":3510},[2223,12525,12526],{"class":2328},"Show Modal",[2223,12528,3813],{"class":3510},[2223,12530,11833],{"class":3513},[2223,12532,3530],{"class":3510},[2223,12534,12535,12537,12540,12543,12545,12548],{"class":2225,"line":25},[2223,12536,3835],{"class":3510},[2223,12538,12539],{"class":3513},"Teleport",[2223,12541,12542],{"class":3517}," to",[2223,12544,3524],{"class":2328},[2223,12546,12547],{"class":2233},"\"body\"",[2223,12549,3530],{"class":3510},[2223,12551,12552,12554,12556,12558,12560,12562,12564,12566,12568,12570,12573],{"class":2225,"line":2341},[2223,12553,3845],{"class":3510},[2223,12555,3917],{"class":3513},[2223,12557,11794],{"class":2318},[2223,12559,3524],{"class":2328},[2223,12561,3944],{"class":3646},[2223,12563,12515],{"class":2334},[2223,12565,3944],{"class":3646},[2223,12567,3851],{"class":3517},[2223,12569,3524],{"class":2328},[2223,12571,12572],{"class":2233},"\"modal\"",[2223,12574,3530],{"class":3510},[2223,12576,12577,12579,12581,12583,12586,12588,12590],{"class":2225,"line":336},[2223,12578,3863],{"class":3510},[2223,12580,12],{"class":3513},[2223,12582,4117],{"class":3510},[2223,12584,12585],{"class":2328},"This is a modal!",[2223,12587,3813],{"class":3510},[2223,12589,12],{"class":3513},[2223,12591,3530],{"class":3510},[2223,12593,12594,12596,12598,12600,12602,12604,12606,12608,12610,12613,12615,12617,12620,12622,12624],{"class":2225,"line":2357},[2223,12595,3863],{"class":3510},[2223,12597,11833],{"class":3513},[2223,12599,11836],{"class":2328},[2223,12601,11839],{"class":3517},[2223,12603,3524],{"class":2328},[2223,12605,3944],{"class":3646},[2223,12607,12515],{"class":2334},[2223,12609,2909],{"class":2908},[2223,12611,12612],{"class":2546}," false",[2223,12614,3944],{"class":3646},[2223,12616,4117],{"class":3510},[2223,12618,12619],{"class":2328},"Close",[2223,12621,3813],{"class":3510},[2223,12623,11833],{"class":3513},[2223,12625,3530],{"class":3510},[2223,12627,12628,12630,12632],{"class":2225,"line":2363},[2223,12629,4199],{"class":3510},[2223,12631,3917],{"class":3513},[2223,12633,3530],{"class":3510},[2223,12635,12636,12638,12640],{"class":2225,"line":2074},[2223,12637,4208],{"class":3510},[2223,12639,12539],{"class":3513},[2223,12641,3530],{"class":3510},[2223,12643,12644,12646,12648],{"class":2225,"line":43},[2223,12645,3813],{"class":3510},[2223,12647,3828],{"class":3513},[2223,12649,3530],{"class":3510},[2223,12651,12652],{"class":2225,"line":2382},[2223,12653,2616],{"emptyLinePlaceholder":33},[2223,12655,12656,12658,12660,12662,12664,12666,12668],{"class":2225,"line":1784},[2223,12657,3113],{"class":3510},[2223,12659,3514],{"class":3513},[2223,12661,3518],{"class":3517},[2223,12663,3521],{"class":3517},[2223,12665,3524],{"class":2328},[2223,12667,3527],{"class":2233},[2223,12669,3530],{"class":3510},[2223,12671,12672,12674,12676,12678,12680,12682,12684],{"class":2225,"line":82},[2223,12673,2871],{"class":2318},[2223,12675,2874],{"class":2328},[2223,12677,10419],{"class":2334},[2223,12679,2880],{"class":2328},[2223,12681,2883],{"class":2318},[2223,12683,10522],{"class":2233},[2223,12685,2889],{"class":2328},[2223,12687,12688,12690,12693,12695,12697,12699,12701],{"class":2225,"line":1432},[2223,12689,3564],{"class":2900},[2223,12691,12692],{"class":2904}," showModal",[2223,12694,2909],{"class":2908},[2223,12696,10545],{"class":2229},[2223,12698,3001],{"class":2328},[2223,12700,11215],{"class":2546},[2223,12702,3691],{"class":2328},[2223,12704,12705,12707,12709],{"class":2225,"line":369},[2223,12706,3813],{"class":3510},[2223,12708,3514],{"class":3513},[2223,12710,3530],{"class":3510},[16,12712,12714],{"id":12713},"_7-typescript-integration-for-robustness","7. TypeScript Integration for Robustness",[12,12716,12717],{},"Vue 3 is written in TypeScript and provides excellent support for it. Using TypeScript enhances type safety, improves code maintainability, and provides better autocompletion and refactoring capabilities in IDEs.",[116,12719,12721],{"id":12720},"typing-props-and-emits","Typing Props and Emits",[2214,12723,12725],{"className":3501,"code":12724,"language":3503,"meta":24,"style":24},"\u003Cscript setup lang=\"ts\">\ninterface Props {\n  title: string\n  count?: number\n  items: string[]\n  user: {\n    name: string\n    email: string\n  }\n}\n\ninterface Emits {\n  (e: 'update', value: number): void\n  (e: 'delete', id: string): void\n}\n\nconst props = withDefaults(defineProps\u003CProps>(), {\n  count: 0\n})\n\nconst emit = defineEmits\u003CEmits>()\n\nfunction handleUpdate() {\n  emit('update', props.count + 1)\n}\n\u003C/script>\n",[2220,12726,12727,12743,12753,12762,12771,12783,12792,12801,12810,12814,12818,12822,12831,12859,12885,12889,12893,12916,12924,12928,12932,12952,12956,12965,12991,12995],{"__ignoreMap":24},[2223,12728,12729,12731,12733,12735,12737,12739,12741],{"class":2225,"line":2226},[2223,12730,3113],{"class":3510},[2223,12732,3514],{"class":3513},[2223,12734,3518],{"class":3517},[2223,12736,3521],{"class":3517},[2223,12738,3524],{"class":2328},[2223,12740,3527],{"class":2233},[2223,12742,3530],{"class":3510},[2223,12744,12745,12748,12751],{"class":2225,"line":28},[2223,12746,12747],{"class":2900},"interface",[2223,12749,12750],{"class":3100}," Props",[2223,12752,2379],{"class":2328},[2223,12754,12755,12757,12759],{"class":2225,"line":25},[2223,12756,3178],{"class":3131},[2223,12758,2300],{"class":2908},[2223,12760,12761],{"class":3137}," string\n",[2223,12763,12764,12766,12768],{"class":2225,"line":2341},[2223,12765,10764],{"class":3131},[2223,12767,3214],{"class":2908},[2223,12769,12770],{"class":3137}," number\n",[2223,12772,12773,12776,12778,12780],{"class":2225,"line":336},[2223,12774,12775],{"class":3131},"  items",[2223,12777,2300],{"class":2908},[2223,12779,3138],{"class":3137},[2223,12781,12782],{"class":2328},"[]\n",[2223,12784,12785,12788,12790],{"class":2225,"line":2357},[2223,12786,12787],{"class":3131},"  user",[2223,12789,2300],{"class":2908},[2223,12791,2379],{"class":2328},[2223,12793,12794,12797,12799],{"class":2225,"line":2363},[2223,12795,12796],{"class":3131},"    name",[2223,12798,2300],{"class":2908},[2223,12800,12761],{"class":3137},[2223,12802,12803,12806,12808],{"class":2225,"line":2074},[2223,12804,12805],{"class":3131},"    email",[2223,12807,2300],{"class":2908},[2223,12809,12761],{"class":3137},[2223,12811,12812],{"class":2225,"line":43},[2223,12813,2652],{"class":2328},[2223,12815,12816],{"class":2225,"line":2382},[2223,12817,4487],{"class":2328},[2223,12819,12820],{"class":2225,"line":1784},[2223,12821,2616],{"emptyLinePlaceholder":33},[2223,12823,12824,12826,12829],{"class":2225,"line":82},[2223,12825,12747],{"class":2900},[2223,12827,12828],{"class":3100}," Emits",[2223,12830,2379],{"class":2328},[2223,12832,12833,12835,12838,12840,12843,12845,12847,12849,12852,12854,12856],{"class":2225,"line":1432},[2223,12834,4882],{"class":2328},[2223,12836,12837],{"class":3131},"e",[2223,12839,2300],{"class":2908},[2223,12841,12842],{"class":2233}," 'update'",[2223,12844,269],{"class":2328},[2223,12846,3649],{"class":3131},[2223,12848,2300],{"class":2908},[2223,12850,12851],{"class":3137}," number",[2223,12853,4000],{"class":2328},[2223,12855,2300],{"class":2908},[2223,12857,12858],{"class":3137}," void\n",[2223,12860,12861,12863,12865,12867,12870,12872,12875,12877,12879,12881,12883],{"class":2225,"line":369},[2223,12862,4882],{"class":2328},[2223,12864,12837],{"class":3131},[2223,12866,2300],{"class":2908},[2223,12868,12869],{"class":2233}," 'delete'",[2223,12871,269],{"class":2328},[2223,12873,12874],{"class":3131},"id",[2223,12876,2300],{"class":2908},[2223,12878,3138],{"class":3137},[2223,12880,4000],{"class":2328},[2223,12882,2300],{"class":2908},[2223,12884,12858],{"class":3137},[2223,12886,12887],{"class":2225,"line":2425},[2223,12888,4487],{"class":2328},[2223,12890,12891],{"class":2225,"line":1750},[2223,12892,2616],{"emptyLinePlaceholder":33},[2223,12894,12895,12897,12899,12901,12904,12906,12908,12910,12913],{"class":2225,"line":2105},[2223,12896,3564],{"class":2900},[2223,12898,5437],{"class":2904},[2223,12900,2909],{"class":2908},[2223,12902,12903],{"class":2229}," withDefaults",[2223,12905,3001],{"class":2328},[2223,12907,12255],{"class":2229},[2223,12909,3113],{"class":2328},[2223,12911,12912],{"class":3100},"Props",[2223,12914,12915],{"class":2328},">(), {\n",[2223,12917,12918,12921],{"class":2225,"line":2449},[2223,12919,12920],{"class":2334},"  count:",[2223,12922,12923],{"class":4463}," 0\n",[2223,12925,12926],{"class":2225,"line":2454},[2223,12927,11556],{"class":2328},[2223,12929,12930],{"class":2225,"line":1839},[2223,12931,2616],{"emptyLinePlaceholder":33},[2223,12933,12934,12936,12939,12941,12944,12946,12949],{"class":2225,"line":2473},[2223,12935,3564],{"class":2900},[2223,12937,12938],{"class":2904}," emit",[2223,12940,2909],{"class":2908},[2223,12942,12943],{"class":2229}," defineEmits",[2223,12945,3113],{"class":2328},[2223,12947,12948],{"class":3100},"Emits",[2223,12950,12951],{"class":2328},">()\n",[2223,12953,12954],{"class":2225,"line":2483},[2223,12955,2616],{"emptyLinePlaceholder":33},[2223,12957,12958,12960,12963],{"class":2225,"line":2493},[2223,12959,10753],{"class":2900},[2223,12961,12962],{"class":2229}," handleUpdate",[2223,12964,10759],{"class":2328},[2223,12966,12967,12970,12972,12975,12977,12979,12981,12983,12986,12989],{"class":2225,"line":2504},[2223,12968,12969],{"class":2229},"  emit",[2223,12971,3001],{"class":2328},[2223,12973,12974],{"class":2233},"'update'",[2223,12976,269],{"class":2328},[2223,12978,5472],{"class":2334},[2223,12980,260],{"class":2328},[2223,12982,10638],{"class":2334},[2223,12984,12985],{"class":2908}," +",[2223,12987,12988],{"class":4463}," 1",[2223,12990,4947],{"class":2328},[2223,12992,12993],{"class":2225,"line":2510},[2223,12994,4487],{"class":2328},[2223,12996,12997,12999,13001],{"class":2225,"line":2516},[2223,12998,3813],{"class":3510},[2223,13000,3514],{"class":3513},[2223,13002,3530],{"class":3510},[116,13004,13006],{"id":13005},"typing-composables","Typing Composables",[2214,13008,13010],{"className":2303,"code":13009,"language":2305,"meta":24,"style":24},"// composables/useFetch.ts\nimport { ref, type Ref } from 'vue'\n\ninterface UseFetchReturn\u003CT> {\n  data: Ref\u003CT | null>\n  error: Ref\u003CError | null>\n  loading: Ref\u003Cboolean>\n  refetch: () => Promise\u003Cvoid>\n}\n\nexport function useFetch\u003CT>(url: string): UseFetchReturn\u003CT> {\n  const data = ref\u003CT | null>(null)\n  const error = ref\u003CError | null>(null)\n  const loading = ref(false)\n  \n  async function fetchData() {\n    loading.value = true\n    error.value = null\n    \n    try {\n      const response = await fetch(url)\n      data.value = await response.json()\n    } catch (e) {\n      error.value = e as Error\n    } finally {\n      loading.value = false\n    }\n  }\n  \n  fetchData()\n  \n  return {\n    data,\n    error,\n    loading,\n    refetch: fetchData\n  }\n}\n",[2220,13011,13012,13017,13037,13041,13056,13075,13095,13109,13130,13134,13138,13172,13197,13222,13239,13243,13253,13266,13279,13283,13289,13308,13329,13341,13360,13368,13381,13385,13389,13393,13400,13404,13410,13417,13423,13429,13437,13441],{"__ignoreMap":24},[2223,13013,13014],{"class":2225,"line":2226},[2223,13015,13016],{"class":2312},"// composables/useFetch.ts\n",[2223,13018,13019,13021,13023,13025,13027,13029,13031,13033,13035],{"class":2225,"line":28},[2223,13020,2871],{"class":2318},[2223,13022,2874],{"class":2328},[2223,13024,10419],{"class":2334},[2223,13026,269],{"class":2328},[2223,13028,3544],{"class":2318},[2223,13030,12111],{"class":2334},[2223,13032,2880],{"class":2328},[2223,13034,2883],{"class":2318},[2223,13036,11138],{"class":2233},[2223,13038,13039],{"class":2225,"line":25},[2223,13040,2616],{"emptyLinePlaceholder":33},[2223,13042,13043,13045,13048,13050,13053],{"class":2225,"line":2341},[2223,13044,12747],{"class":2900},[2223,13046,13047],{"class":3100}," UseFetchReturn",[2223,13049,3113],{"class":2328},[2223,13051,13052],{"class":3100},"T",[2223,13054,13055],{"class":2328},"> {\n",[2223,13057,13058,13061,13063,13065,13067,13069,13071,13073],{"class":2225,"line":336},[2223,13059,13060],{"class":3131},"  data",[2223,13062,2300],{"class":2908},[2223,13064,12111],{"class":3100},[2223,13066,3113],{"class":2328},[2223,13068,13052],{"class":3100},[2223,13070,5229],{"class":2908},[2223,13072,5232],{"class":3137},[2223,13074,3530],{"class":2328},[2223,13076,13077,13080,13082,13084,13086,13089,13091,13093],{"class":2225,"line":2357},[2223,13078,13079],{"class":3131},"  error",[2223,13081,2300],{"class":2908},[2223,13083,12111],{"class":3100},[2223,13085,3113],{"class":2328},[2223,13087,13088],{"class":3100},"Error",[2223,13090,5229],{"class":2908},[2223,13092,5232],{"class":3137},[2223,13094,3530],{"class":2328},[2223,13096,13097,13099,13101,13103,13105,13107],{"class":2225,"line":2363},[2223,13098,6330],{"class":3131},[2223,13100,2300],{"class":2908},[2223,13102,12111],{"class":3100},[2223,13104,3113],{"class":2328},[2223,13106,3045],{"class":3137},[2223,13108,3530],{"class":2328},[2223,13110,13111,13114,13116,13118,13120,13123,13125,13128],{"class":2225,"line":2074},[2223,13112,13113],{"class":2229},"  refetch",[2223,13115,2300],{"class":2908},[2223,13117,3664],{"class":2328},[2223,13119,3353],{"class":2900},[2223,13121,13122],{"class":3100}," Promise",[2223,13124,3113],{"class":2328},[2223,13126,13127],{"class":3137},"void",[2223,13129,3530],{"class":2328},[2223,13131,13132],{"class":2225,"line":43},[2223,13133,4487],{"class":2328},[2223,13135,13136],{"class":2225,"line":2382},[2223,13137,2616],{"emptyLinePlaceholder":33},[2223,13139,13140,13142,13144,13147,13149,13151,13153,13156,13158,13160,13162,13164,13166,13168,13170],{"class":2225,"line":1784},[2223,13141,2319],{"class":2318},[2223,13143,10859],{"class":2900},[2223,13145,13146],{"class":2229}," useFetch",[2223,13148,3113],{"class":2328},[2223,13150,13052],{"class":3100},[2223,13152,11194],{"class":2328},[2223,13154,13155],{"class":3131},"url",[2223,13157,2300],{"class":2908},[2223,13159,3138],{"class":3137},[2223,13161,4000],{"class":2328},[2223,13163,2300],{"class":2908},[2223,13165,13047],{"class":3100},[2223,13167,3113],{"class":2328},[2223,13169,13052],{"class":3100},[2223,13171,13055],{"class":2328},[2223,13173,13174,13176,13179,13181,13183,13185,13187,13189,13191,13193,13195],{"class":2225,"line":82},[2223,13175,5184],{"class":2900},[2223,13177,13178],{"class":2904}," data",[2223,13180,2909],{"class":2908},[2223,13182,10545],{"class":2229},[2223,13184,3113],{"class":2328},[2223,13186,13052],{"class":3100},[2223,13188,5229],{"class":2908},[2223,13190,5232],{"class":3137},[2223,13192,11194],{"class":2328},[2223,13194,11197],{"class":2546},[2223,13196,4947],{"class":2328},[2223,13198,13199,13201,13204,13206,13208,13210,13212,13214,13216,13218,13220],{"class":2225,"line":1432},[2223,13200,5184],{"class":2900},[2223,13202,13203],{"class":2904}," error",[2223,13205,2909],{"class":2908},[2223,13207,10545],{"class":2229},[2223,13209,3113],{"class":2328},[2223,13211,13088],{"class":3100},[2223,13213,5229],{"class":2908},[2223,13215,5232],{"class":3137},[2223,13217,11194],{"class":2328},[2223,13219,11197],{"class":2546},[2223,13221,4947],{"class":2328},[2223,13223,13224,13226,13229,13231,13233,13235,13237],{"class":2225,"line":369},[2223,13225,5184],{"class":2900},[2223,13227,13228],{"class":2904}," loading",[2223,13230,2909],{"class":2908},[2223,13232,10545],{"class":2229},[2223,13234,3001],{"class":2328},[2223,13236,11215],{"class":2546},[2223,13238,4947],{"class":2328},[2223,13240,13241],{"class":2225,"line":2425},[2223,13242,2371],{"class":2328},[2223,13244,13245,13247,13249,13251],{"class":2225,"line":1750},[2223,13246,3661],{"class":2900},[2223,13248,10859],{"class":2900},[2223,13250,6189],{"class":2229},[2223,13252,10759],{"class":2328},[2223,13254,13255,13258,13260,13262,13264],{"class":2225,"line":2105},[2223,13256,13257],{"class":2334},"    loading",[2223,13259,260],{"class":2328},[2223,13261,3649],{"class":2334},[2223,13263,2909],{"class":2908},[2223,13265,11328],{"class":2546},[2223,13267,13268,13271,13273,13275,13277],{"class":2225,"line":2449},[2223,13269,13270],{"class":2334},"    error",[2223,13272,260],{"class":2328},[2223,13274,3649],{"class":2334},[2223,13276,2909],{"class":2908},[2223,13278,11480],{"class":2546},[2223,13280,13281],{"class":2225,"line":2454},[2223,13282,4752],{"class":2328},[2223,13284,13285,13287],{"class":2225,"line":1839},[2223,13286,11333],{"class":2318},[2223,13288,2379],{"class":2328},[2223,13290,13291,13293,13295,13297,13299,13302,13304,13306],{"class":2225,"line":2473},[2223,13292,5279],{"class":2900},[2223,13294,11342],{"class":2904},[2223,13296,2909],{"class":2908},[2223,13298,3623],{"class":2318},[2223,13300,13301],{"class":2229}," fetch",[2223,13303,3001],{"class":2328},[2223,13305,13155],{"class":2334},[2223,13307,4947],{"class":2328},[2223,13309,13310,13313,13315,13317,13319,13321,13323,13325,13327],{"class":2225,"line":2483},[2223,13311,13312],{"class":2334},"      data",[2223,13314,260],{"class":2328},[2223,13316,3649],{"class":2334},[2223,13318,2909],{"class":2908},[2223,13320,3623],{"class":2318},[2223,13322,11342],{"class":2334},[2223,13324,260],{"class":2328},[2223,13326,9016],{"class":2229},[2223,13328,4389],{"class":2328},[2223,13330,13331,13333,13335,13337,13339],{"class":2225,"line":2493},[2223,13332,11383],{"class":2328},[2223,13334,11386],{"class":2318},[2223,13336,3340],{"class":2328},[2223,13338,12837],{"class":2334},[2223,13340,4444],{"class":2328},[2223,13342,13343,13346,13348,13350,13352,13355,13357],{"class":2225,"line":2504},[2223,13344,13345],{"class":2334},"      error",[2223,13347,260],{"class":2328},[2223,13349,3649],{"class":2334},[2223,13351,2909],{"class":2908},[2223,13353,13354],{"class":2334}," e",[2223,13356,4891],{"class":2318},[2223,13358,13359],{"class":3100}," Error\n",[2223,13361,13362,13364,13366],{"class":2225,"line":2510},[2223,13363,11383],{"class":2328},[2223,13365,11428],{"class":2318},[2223,13367,2379],{"class":2328},[2223,13369,13370,13373,13375,13377,13379],{"class":2225,"line":2516},[2223,13371,13372],{"class":2334},"      loading",[2223,13374,260],{"class":2328},[2223,13376,3649],{"class":2334},[2223,13378,2909],{"class":2908},[2223,13380,11444],{"class":2546},[2223,13382,13383],{"class":2225,"line":2526},[2223,13384,2604],{"class":2328},[2223,13386,13387],{"class":2225,"line":2540},[2223,13388,2652],{"class":2328},[2223,13390,13391],{"class":2225,"line":2552},[2223,13392,2371],{"class":2328},[2223,13394,13395,13398],{"class":2225,"line":2563},[2223,13396,13397],{"class":2229},"  fetchData",[2223,13399,4389],{"class":2328},[2223,13401,13402],{"class":2225,"line":2571},[2223,13403,2371],{"class":2328},[2223,13405,13406,13408],{"class":2225,"line":2581},[2223,13407,3360],{"class":2318},[2223,13409,2379],{"class":2328},[2223,13411,13412,13415],{"class":2225,"line":2592},[2223,13413,13414],{"class":2334},"    data",[2223,13416,2347],{"class":2328},[2223,13418,13419,13421],{"class":2225,"line":2601},[2223,13420,13270],{"class":2334},[2223,13422,2347],{"class":2328},[2223,13424,13425,13427],{"class":2225,"line":2607},[2223,13426,13257],{"class":2334},[2223,13428,2347],{"class":2328},[2223,13430,13431,13434],{"class":2225,"line":2613},[2223,13432,13433],{"class":2334},"    refetch:",[2223,13435,13436],{"class":2334}," fetchData\n",[2223,13438,13439],{"class":2225,"line":2619},[2223,13440,2652],{"class":2328},[2223,13442,13443],{"class":2225,"line":2627},[2223,13444,4487],{"class":2328},[16,13446,13448],{"id":13447},"_8-advanced-patterns-and-techniques","8. Advanced Patterns and Techniques",[116,13450,13452],{"id":13451},"render-functions-for-dynamic-content","Render Functions for Dynamic Content",[12,13454,13455],{},"When templates aren't flexible enough, use render functions:",[2214,13457,13459],{"className":3501,"code":13458,"language":3503,"meta":24,"style":24},"\u003Cscript setup lang=\"ts\">\nimport { h, type VNode } from 'vue'\n\ninterface DynamicComponentProps {\n  type: 'button' | 'link' | 'text'\n  content: string\n}\n\nfunction renderDynamic(props: DynamicComponentProps): VNode {\n  switch (props.type) {\n    case 'button':\n      return h('button', { class: 'btn' }, props.content)\n    case 'link':\n      return h('a', { href: '#', class: 'link' }, props.content)\n    case 'text':\n      return h('span', props.content)\n  }\n}\n\u003C/script>\n",[2220,13460,13461,13477,13498,13502,13511,13531,13540,13544,13548,13571,13586,13595,13628,13636,13671,13680,13701,13705,13709],{"__ignoreMap":24},[2223,13462,13463,13465,13467,13469,13471,13473,13475],{"class":2225,"line":2226},[2223,13464,3113],{"class":3510},[2223,13466,3514],{"class":3513},[2223,13468,3518],{"class":3517},[2223,13470,3521],{"class":3517},[2223,13472,3524],{"class":2328},[2223,13474,3527],{"class":2233},[2223,13476,3530],{"class":3510},[2223,13478,13479,13481,13483,13485,13487,13489,13492,13494,13496],{"class":2225,"line":28},[2223,13480,2871],{"class":2318},[2223,13482,2874],{"class":2328},[2223,13484,7828],{"class":2334},[2223,13486,269],{"class":2328},[2223,13488,3544],{"class":2318},[2223,13490,13491],{"class":2334}," VNode",[2223,13493,2880],{"class":2328},[2223,13495,2883],{"class":2318},[2223,13497,11138],{"class":2233},[2223,13499,13500],{"class":2225,"line":25},[2223,13501,2616],{"emptyLinePlaceholder":33},[2223,13503,13504,13506,13509],{"class":2225,"line":2341},[2223,13505,12747],{"class":2900},[2223,13507,13508],{"class":3100}," DynamicComponentProps",[2223,13510,2379],{"class":2328},[2223,13512,13513,13516,13518,13521,13523,13526,13528],{"class":2225,"line":336},[2223,13514,13515],{"class":3131},"  type",[2223,13517,2300],{"class":2908},[2223,13519,13520],{"class":2233}," 'button'",[2223,13522,5229],{"class":2908},[2223,13524,13525],{"class":2233}," 'link'",[2223,13527,5229],{"class":2908},[2223,13529,13530],{"class":2233}," 'text'\n",[2223,13532,13533,13536,13538],{"class":2225,"line":2357},[2223,13534,13535],{"class":3131},"  content",[2223,13537,2300],{"class":2908},[2223,13539,12761],{"class":3137},[2223,13541,13542],{"class":2225,"line":2363},[2223,13543,4487],{"class":2328},[2223,13545,13546],{"class":2225,"line":2074},[2223,13547,2616],{"emptyLinePlaceholder":33},[2223,13549,13550,13552,13555,13557,13559,13561,13563,13565,13567,13569],{"class":2225,"line":43},[2223,13551,10753],{"class":2900},[2223,13553,13554],{"class":2229}," renderDynamic",[2223,13556,3001],{"class":2328},[2223,13558,5472],{"class":3131},[2223,13560,2300],{"class":2908},[2223,13562,13508],{"class":3100},[2223,13564,4000],{"class":2328},[2223,13566,2300],{"class":2908},[2223,13568,13491],{"class":3100},[2223,13570,2379],{"class":2328},[2223,13572,13573,13576,13578,13580,13582,13584],{"class":2225,"line":2382},[2223,13574,13575],{"class":2318},"  switch",[2223,13577,3340],{"class":2328},[2223,13579,5472],{"class":2334},[2223,13581,260],{"class":2328},[2223,13583,3544],{"class":2334},[2223,13585,4444],{"class":2328},[2223,13587,13588,13591,13593],{"class":2225,"line":1784},[2223,13589,13590],{"class":2318},"    case",[2223,13592,13520],{"class":2233},[2223,13594,9711],{"class":2328},[2223,13596,13597,13599,13602,13604,13607,13610,13613,13616,13619,13621,13623,13626],{"class":2225,"line":82},[2223,13598,5351],{"class":2318},[2223,13600,13601],{"class":2229}," h",[2223,13603,3001],{"class":2328},[2223,13605,13606],{"class":2233},"'button'",[2223,13608,13609],{"class":2328},", { ",[2223,13611,13612],{"class":2334},"class:",[2223,13614,13615],{"class":2233}," 'btn'",[2223,13617,13618],{"class":2328}," }, ",[2223,13620,5472],{"class":2334},[2223,13622,260],{"class":2328},[2223,13624,13625],{"class":2334},"content",[2223,13627,4947],{"class":2328},[2223,13629,13630,13632,13634],{"class":2225,"line":1432},[2223,13631,13590],{"class":2318},[2223,13633,13525],{"class":2233},[2223,13635,9711],{"class":2328},[2223,13637,13638,13640,13642,13644,13647,13649,13652,13655,13657,13659,13661,13663,13665,13667,13669],{"class":2225,"line":369},[2223,13639,5351],{"class":2318},[2223,13641,13601],{"class":2229},[2223,13643,3001],{"class":2328},[2223,13645,13646],{"class":2233},"'a'",[2223,13648,13609],{"class":2328},[2223,13650,13651],{"class":2334},"href:",[2223,13653,13654],{"class":2233}," '#'",[2223,13656,269],{"class":2328},[2223,13658,13612],{"class":2334},[2223,13660,13525],{"class":2233},[2223,13662,13618],{"class":2328},[2223,13664,5472],{"class":2334},[2223,13666,260],{"class":2328},[2223,13668,13625],{"class":2334},[2223,13670,4947],{"class":2328},[2223,13672,13673,13675,13678],{"class":2225,"line":2425},[2223,13674,13590],{"class":2318},[2223,13676,13677],{"class":2233}," 'text'",[2223,13679,9711],{"class":2328},[2223,13681,13682,13684,13686,13688,13691,13693,13695,13697,13699],{"class":2225,"line":1750},[2223,13683,5351],{"class":2318},[2223,13685,13601],{"class":2229},[2223,13687,3001],{"class":2328},[2223,13689,13690],{"class":2233},"'span'",[2223,13692,269],{"class":2328},[2223,13694,5472],{"class":2334},[2223,13696,260],{"class":2328},[2223,13698,13625],{"class":2334},[2223,13700,4947],{"class":2328},[2223,13702,13703],{"class":2225,"line":2105},[2223,13704,2652],{"class":2328},[2223,13706,13707],{"class":2225,"line":2449},[2223,13708,4487],{"class":2328},[2223,13710,13711,13713,13715],{"class":2225,"line":2454},[2223,13712,3813],{"class":3510},[2223,13714,3514],{"class":3513},[2223,13716,3530],{"class":3510},[116,13718,13720],{"id":13719},"slot-patterns-for-maximum-flexibility","Slot Patterns for Maximum Flexibility",[2214,13722,13724],{"className":3501,"code":13723,"language":3503,"meta":24,"style":24},"\u003C!-- FlexibleCard.vue -->\n\u003Cscript setup lang=\"ts\">\ninterface Props {\n  title?: string\n  variant?: 'default' | 'highlighted'\n}\n\nconst props = withDefaults(defineProps\u003CProps>(), {\n  variant: 'default'\n})\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cdiv :class=\"`card card--${variant}`\">\n    \u003C!-- Named slot with fallback -->\n    \u003Cheader v-if=\"$slots.header || title\" class=\"card__header\">\n      \u003Cslot name=\"header\">\n        \u003Ch2>{{ title }}\u003C/h2>\n      \u003C/slot>\n    \u003C/header>\n    \n    \u003C!-- Default slot -->\n    \u003Cdiv class=\"card__body\">\n      \u003Cslot>\n        \u003C!-- Fallback content -->\n        \u003Cp>No content provided\u003C/p>\n      \u003C/slot>\n    \u003C/div>\n    \n    \u003C!-- Scoped slot for passing data to parent -->\n    \u003Cfooter v-if=\"$slots.footer\" class=\"card__footer\">\n      \u003Cslot name=\"footer\" :variant=\"variant\" />\n    \u003C/footer>\n  \u003C/div>\n\u003C/template>\n",[2220,13725,13726,13731,13747,13755,13763,13778,13782,13786,13806,13814,13818,13826,13830,13838,13868,13873,13909,13926,13946,13954,13962,13966,13971,13986,13994,13999,14016,14024,14032,14036,14041,14071,14102,14110,14118],{"__ignoreMap":24},[2223,13727,13728],{"class":2225,"line":2226},[2223,13729,13730],{"class":2312},"\u003C!-- FlexibleCard.vue -->\n",[2223,13732,13733,13735,13737,13739,13741,13743,13745],{"class":2225,"line":28},[2223,13734,3113],{"class":3510},[2223,13736,3514],{"class":3513},[2223,13738,3518],{"class":3517},[2223,13740,3521],{"class":3517},[2223,13742,3524],{"class":2328},[2223,13744,3527],{"class":2233},[2223,13746,3530],{"class":3510},[2223,13748,13749,13751,13753],{"class":2225,"line":25},[2223,13750,12747],{"class":2900},[2223,13752,12750],{"class":3100},[2223,13754,2379],{"class":2328},[2223,13756,13757,13759,13761],{"class":2225,"line":2341},[2223,13758,3178],{"class":3131},[2223,13760,3214],{"class":2908},[2223,13762,12761],{"class":3137},[2223,13764,13765,13768,13770,13773,13775],{"class":2225,"line":336},[2223,13766,13767],{"class":3131},"  variant",[2223,13769,3214],{"class":2908},[2223,13771,13772],{"class":2233}," 'default'",[2223,13774,5229],{"class":2908},[2223,13776,13777],{"class":2233}," 'highlighted'\n",[2223,13779,13780],{"class":2225,"line":2357},[2223,13781,4487],{"class":2328},[2223,13783,13784],{"class":2225,"line":2363},[2223,13785,2616],{"emptyLinePlaceholder":33},[2223,13787,13788,13790,13792,13794,13796,13798,13800,13802,13804],{"class":2225,"line":2074},[2223,13789,3564],{"class":2900},[2223,13791,5437],{"class":2904},[2223,13793,2909],{"class":2908},[2223,13795,12903],{"class":2229},[2223,13797,3001],{"class":2328},[2223,13799,12255],{"class":2229},[2223,13801,3113],{"class":2328},[2223,13803,12912],{"class":3100},[2223,13805,12915],{"class":2328},[2223,13807,13808,13811],{"class":2225,"line":43},[2223,13809,13810],{"class":2334},"  variant:",[2223,13812,13813],{"class":2233}," 'default'\n",[2223,13815,13816],{"class":2225,"line":2382},[2223,13817,11556],{"class":2328},[2223,13819,13820,13822,13824],{"class":2225,"line":1784},[2223,13821,3813],{"class":3510},[2223,13823,3514],{"class":3513},[2223,13825,3530],{"class":3510},[2223,13827,13828],{"class":2225,"line":82},[2223,13829,2616],{"emptyLinePlaceholder":33},[2223,13831,13832,13834,13836],{"class":2225,"line":1432},[2223,13833,3113],{"class":3510},[2223,13835,3828],{"class":3513},[2223,13837,3530],{"class":3510},[2223,13839,13840,13842,13844,13846,13848,13850,13852,13855,13857,13860,13862,13864,13866],{"class":2225,"line":369},[2223,13841,3835],{"class":3510},[2223,13843,3917],{"class":3513},[2223,13845,4762],{"class":2328},[2223,13847,12179],{"class":3517},[2223,13849,3524],{"class":2328},[2223,13851,3944],{"class":3646},[2223,13853,13854],{"class":2233},"`card card--",[2223,13856,3367],{"class":3366},[2223,13858,13859],{"class":2334},"variant",[2223,13861,3372],{"class":3366},[2223,13863,3654],{"class":2233},[2223,13865,3944],{"class":3646},[2223,13867,3530],{"class":3510},[2223,13869,13870],{"class":2225,"line":2425},[2223,13871,13872],{"class":2312},"    \u003C!-- Named slot with fallback -->\n",[2223,13874,13875,13877,13880,13882,13884,13886,13889,13891,13893,13895,13898,13900,13902,13904,13907],{"class":2225,"line":1750},[2223,13876,3845],{"class":3510},[2223,13878,13879],{"class":3513},"header",[2223,13881,11794],{"class":2318},[2223,13883,3524],{"class":2328},[2223,13885,3944],{"class":3646},[2223,13887,13888],{"class":2334},"$slots",[2223,13890,260],{"class":2328},[2223,13892,13879],{"class":2334},[2223,13894,5397],{"class":2908},[2223,13896,13897],{"class":2334}," title",[2223,13899,3944],{"class":3646},[2223,13901,3851],{"class":3517},[2223,13903,3524],{"class":2328},[2223,13905,13906],{"class":2233},"\"card__header\"",[2223,13908,3530],{"class":3510},[2223,13910,13911,13913,13916,13919,13921,13924],{"class":2225,"line":2105},[2223,13912,3863],{"class":3510},[2223,13914,13915],{"class":3513},"slot",[2223,13917,13918],{"class":3517}," name",[2223,13920,3524],{"class":2328},[2223,13922,13923],{"class":2233},"\"header\"",[2223,13925,3530],{"class":3510},[2223,13927,13928,13930,13932,13934,13936,13938,13940,13942,13944],{"class":2225,"line":2449},[2223,13929,3931],{"class":3510},[2223,13931,16],{"class":3513},[2223,13933,4117],{"class":3510},[2223,13935,4120],{"class":2328},[2223,13937,4068],{"class":2334},[2223,13939,4129],{"class":2328},[2223,13941,3813],{"class":3510},[2223,13943,16],{"class":3513},[2223,13945,3530],{"class":3510},[2223,13947,13948,13950,13952],{"class":2225,"line":2454},[2223,13949,3896],{"class":3510},[2223,13951,13915],{"class":3513},[2223,13953,3530],{"class":3510},[2223,13955,13956,13958,13960],{"class":2225,"line":1839},[2223,13957,4199],{"class":3510},[2223,13959,13879],{"class":3513},[2223,13961,3530],{"class":3510},[2223,13963,13964],{"class":2225,"line":2473},[2223,13965,4752],{"class":2328},[2223,13967,13968],{"class":2225,"line":2483},[2223,13969,13970],{"class":2312},"    \u003C!-- Default slot -->\n",[2223,13972,13973,13975,13977,13979,13981,13984],{"class":2225,"line":2493},[2223,13974,3845],{"class":3510},[2223,13976,3917],{"class":3513},[2223,13978,3851],{"class":3517},[2223,13980,3524],{"class":2328},[2223,13982,13983],{"class":2233},"\"card__body\"",[2223,13985,3530],{"class":3510},[2223,13987,13988,13990,13992],{"class":2225,"line":2504},[2223,13989,3863],{"class":3510},[2223,13991,13915],{"class":3513},[2223,13993,3530],{"class":3510},[2223,13995,13996],{"class":2225,"line":2510},[2223,13997,13998],{"class":2312},"        \u003C!-- Fallback content -->\n",[2223,14000,14001,14003,14005,14007,14010,14012,14014],{"class":2225,"line":2516},[2223,14002,3931],{"class":3510},[2223,14004,12],{"class":3513},[2223,14006,4117],{"class":3510},[2223,14008,14009],{"class":2328},"No content provided",[2223,14011,3813],{"class":3510},[2223,14013,12],{"class":3513},[2223,14015,3530],{"class":3510},[2223,14017,14018,14020,14022],{"class":2225,"line":2526},[2223,14019,3896],{"class":3510},[2223,14021,13915],{"class":3513},[2223,14023,3530],{"class":3510},[2223,14025,14026,14028,14030],{"class":2225,"line":2540},[2223,14027,4199],{"class":3510},[2223,14029,3917],{"class":3513},[2223,14031,3530],{"class":3510},[2223,14033,14034],{"class":2225,"line":2552},[2223,14035,4752],{"class":2328},[2223,14037,14038],{"class":2225,"line":2563},[2223,14039,14040],{"class":2312},"    \u003C!-- Scoped slot for passing data to parent -->\n",[2223,14042,14043,14045,14048,14050,14052,14054,14056,14058,14060,14062,14064,14066,14069],{"class":2225,"line":2571},[2223,14044,3845],{"class":3510},[2223,14046,14047],{"class":3513},"footer",[2223,14049,11794],{"class":2318},[2223,14051,3524],{"class":2328},[2223,14053,3944],{"class":3646},[2223,14055,13888],{"class":2334},[2223,14057,260],{"class":2328},[2223,14059,14047],{"class":2334},[2223,14061,3944],{"class":3646},[2223,14063,3851],{"class":3517},[2223,14065,3524],{"class":2328},[2223,14067,14068],{"class":2233},"\"card__footer\"",[2223,14070,3530],{"class":3510},[2223,14072,14073,14075,14077,14079,14081,14084,14086,14088,14090,14092,14094,14096,14100],{"class":2225,"line":2581},[2223,14074,3863],{"class":3510},[2223,14076,13915],{"class":3513},[2223,14078,13918],{"class":3517},[2223,14080,3524],{"class":2328},[2223,14082,14083],{"class":2233},"\"footer\"",[2223,14085,4762],{"class":2328},[2223,14087,13859],{"class":3517},[2223,14089,3524],{"class":2328},[2223,14091,3944],{"class":3646},[2223,14093,13859],{"class":2334},[2223,14095,3944],{"class":3646},[2223,14097,14099],{"class":14098},"sUwQ0"," /",[2223,14101,3530],{"class":3510},[2223,14103,14104,14106,14108],{"class":2225,"line":2592},[2223,14105,4199],{"class":3510},[2223,14107,14047],{"class":3513},[2223,14109,3530],{"class":3510},[2223,14111,14112,14114,14116],{"class":2225,"line":2601},[2223,14113,4208],{"class":3510},[2223,14115,3917],{"class":3513},[2223,14117,3530],{"class":3510},[2223,14119,14120,14122,14124],{"class":2225,"line":2607},[2223,14121,3813],{"class":3510},[2223,14123,3828],{"class":3513},[2223,14125,3530],{"class":3510},[12,14127,14128],{},"Usage:",[2214,14130,14132],{"className":3501,"code":14131,"language":3503,"meta":24,"style":24},"\u003CFlexibleCard variant=\"highlighted\">\n  \u003Ctemplate #header>\n    \u003Ch2>Custom Header\u003C/h2>\n  \u003C/template>\n  \n  \u003Cp>Card content goes here\u003C/p>\n  \n  \u003Ctemplate #footer=\"{ variant }\">\n    \u003Cbutton :class=\"`btn-${variant}`\">Action\u003C/button>\n  \u003C/template>\n\u003C/FlexibleCard>\n",[2220,14133,14134,14151,14156,14161,14166,14170,14175,14179,14184,14189,14193],{"__ignoreMap":24},[2223,14135,14136,14138,14141,14144,14146,14149],{"class":2225,"line":2226},[2223,14137,3113],{"class":3510},[2223,14139,14140],{"class":3513},"FlexibleCard",[2223,14142,14143],{"class":3517}," variant",[2223,14145,3524],{"class":2328},[2223,14147,14148],{"class":2233},"\"highlighted\"",[2223,14150,3530],{"class":3510},[2223,14152,14153],{"class":2225,"line":28},[2223,14154,14155],{"class":2328},"  \u003Ctemplate #header>\n",[2223,14157,14158],{"class":2225,"line":25},[2223,14159,14160],{"class":2328},"    \u003Ch2>Custom Header\u003C/h2>\n",[2223,14162,14163],{"class":2225,"line":2341},[2223,14164,14165],{"class":2328},"  \u003C/template>\n",[2223,14167,14168],{"class":2225,"line":336},[2223,14169,2371],{"class":2328},[2223,14171,14172],{"class":2225,"line":2357},[2223,14173,14174],{"class":2328},"  \u003Cp>Card content goes here\u003C/p>\n",[2223,14176,14177],{"class":2225,"line":2363},[2223,14178,2371],{"class":2328},[2223,14180,14181],{"class":2225,"line":2074},[2223,14182,14183],{"class":2328},"  \u003Ctemplate #footer=\"{ variant }\">\n",[2223,14185,14186],{"class":2225,"line":43},[2223,14187,14188],{"class":2328},"    \u003Cbutton :class=\"`btn-${variant}`\">Action\u003C/button>\n",[2223,14190,14191],{"class":2225,"line":2382},[2223,14192,14165],{"class":2328},[2223,14194,14195,14197,14199],{"class":2225,"line":1784},[2223,14196,3813],{"class":3510},[2223,14198,14140],{"class":3513},[2223,14200,3530],{"class":3510},[116,14202,14204],{"id":14203},"composable-patterns-for-complex-logic","Composable Patterns for Complex Logic",[2214,14206,14208],{"className":2303,"code":14207,"language":2305,"meta":24,"style":24},"// composables/useForm.ts\nimport { reactive, computed } from 'vue'\n\ninterface ValidationRule\u003CT> {\n  validator: (value: T) => boolean\n  message: string\n}\n\nexport function useForm\u003CT extends Record\u003Cstring, any>>(\n  initialValues: T,\n  validationRules: Partial\u003CRecord\u003Ckeyof T, ValidationRule\u003Cany>[]>>\n) {\n  const values = reactive({ ...initialValues })\n  const errors = reactive\u003CPartial\u003CRecord\u003Ckeyof T, string>>>({})\n  const touched = reactive\u003CPartial\u003CRecord\u003Ckeyof T, boolean>>>({})\n  \n  function validate(field: keyof T): boolean {\n    const rules = validationRules[field]\n    if (!rules) return true\n    \n    for (const rule of rules) {\n      if (!rule.validator(values[field])) {\n        errors[field] = rule.message\n        return false\n      }\n    }\n    \n    delete errors[field]\n    return true\n  }\n  \n  function validateAll(): boolean {\n    let isValid = true\n    for (const field in validationRules) {\n      if (!validate(field as keyof T)) {\n        isValid = false\n      }\n    }\n    return isValid\n  }\n  \n  function handleBlur(field: keyof T) {\n    touched[field] = true\n    validate(field)\n  }\n  \n  function handleChange(field: keyof T, value: any) {\n    values[field] = value\n    if (touched[field]) {\n      validate(field)\n    }\n  }\n  \n  function reset() {\n    Object.assign(values, initialValues)\n    Object.keys(errors).forEach(key => delete errors[key as keyof T])\n    Object.keys(touched).forEach(key => delete touched[key as keyof T])\n  }\n  \n  const isValid = computed(() => Object.keys(errors).length === 0)\n  const isDirty = computed(() => \n    JSON.stringify(values) !== JSON.stringify(initialValues)\n  )\n  \n  return {\n    values,\n    errors,\n    touched,\n    isValid,\n    isDirty,\n    validate,\n    validateAll,\n    handleBlur,\n    handleChange,\n    reset\n  }\n}\n",[2220,14209,14210,14215,14233,14237,14250,14273,14282,14286,14290,14321,14332,14366,14370,14390,14423,14454,14458,14486,14506,14525,14529,14548,14577,14598,14605,14609,14613,14617,14630,14636,14640,14644,14660,14672,14689,14713,14722,14726,14730,14737,14741,14745,14764,14779,14790,14794,14798,14826,14842,14858,14869,14873,14878,14883,14892,14913,14957,14996,15001,15006,15043,15061,15094,15100,15105,15112,15119,15127,15134,15142,15150,15157,15165,15173,15181,15187,15192],{"__ignoreMap":24},[2223,14211,14212],{"class":2225,"line":2226},[2223,14213,14214],{"class":2312},"// composables/useForm.ts\n",[2223,14216,14217,14219,14221,14223,14225,14227,14229,14231],{"class":2225,"line":28},[2223,14218,2871],{"class":2318},[2223,14220,2874],{"class":2328},[2223,14222,10423],{"class":2334},[2223,14224,269],{"class":2328},[2223,14226,10445],{"class":2334},[2223,14228,2880],{"class":2328},[2223,14230,2883],{"class":2318},[2223,14232,11138],{"class":2233},[2223,14234,14235],{"class":2225,"line":25},[2223,14236,2616],{"emptyLinePlaceholder":33},[2223,14238,14239,14241,14244,14246,14248],{"class":2225,"line":2341},[2223,14240,12747],{"class":2900},[2223,14242,14243],{"class":3100}," ValidationRule",[2223,14245,3113],{"class":2328},[2223,14247,13052],{"class":3100},[2223,14249,13055],{"class":2328},[2223,14251,14252,14255,14257,14259,14261,14263,14266,14268,14270],{"class":2225,"line":336},[2223,14253,14254],{"class":2229},"  validator",[2223,14256,2300],{"class":2908},[2223,14258,3340],{"class":2328},[2223,14260,3649],{"class":3131},[2223,14262,2300],{"class":2908},[2223,14264,14265],{"class":3100}," T",[2223,14267,3350],{"class":2328},[2223,14269,3353],{"class":2900},[2223,14271,14272],{"class":3137}," boolean\n",[2223,14274,14275,14278,14280],{"class":2225,"line":2357},[2223,14276,14277],{"class":3131},"  message",[2223,14279,2300],{"class":2908},[2223,14281,12761],{"class":3137},[2223,14283,14284],{"class":2225,"line":2363},[2223,14285,4487],{"class":2328},[2223,14287,14288],{"class":2225,"line":2074},[2223,14289,2616],{"emptyLinePlaceholder":33},[2223,14291,14292,14294,14296,14299,14301,14303,14306,14309,14311,14313,14315,14318],{"class":2225,"line":43},[2223,14293,2319],{"class":2318},[2223,14295,10859],{"class":2900},[2223,14297,14298],{"class":2229}," useForm",[2223,14300,3113],{"class":2328},[2223,14302,13052],{"class":3100},[2223,14304,14305],{"class":2900}," extends",[2223,14307,14308],{"class":3100}," Record",[2223,14310,3113],{"class":2328},[2223,14312,2931],{"class":3137},[2223,14314,269],{"class":2328},[2223,14316,14317],{"class":3137},"any",[2223,14319,14320],{"class":2328},">>(\n",[2223,14322,14323,14326,14328,14330],{"class":2225,"line":2382},[2223,14324,14325],{"class":3131},"  initialValues",[2223,14327,2300],{"class":2908},[2223,14329,14265],{"class":3100},[2223,14331,2347],{"class":2328},[2223,14333,14334,14337,14339,14342,14344,14347,14349,14352,14354,14356,14359,14361,14363],{"class":2225,"line":1784},[2223,14335,14336],{"class":3131},"  validationRules",[2223,14338,2300],{"class":2908},[2223,14340,14341],{"class":3100}," Partial",[2223,14343,3113],{"class":2328},[2223,14345,14346],{"class":3100},"Record",[2223,14348,3113],{"class":2328},[2223,14350,14351],{"class":2900},"keyof",[2223,14353,14265],{"class":3100},[2223,14355,269],{"class":2328},[2223,14357,14358],{"class":3100},"ValidationRule",[2223,14360,3113],{"class":2328},[2223,14362,14317],{"class":3137},[2223,14364,14365],{"class":2328},">[]>>\n",[2223,14367,14368],{"class":2225,"line":82},[2223,14369,4444],{"class":2328},[2223,14371,14372,14374,14377,14379,14381,14383,14385,14388],{"class":2225,"line":1432},[2223,14373,5184],{"class":2900},[2223,14375,14376],{"class":2904}," values",[2223,14378,2909],{"class":2908},[2223,14380,10564],{"class":2229},[2223,14382,4400],{"class":2328},[2223,14384,5727],{"class":2908},[2223,14386,14387],{"class":2334},"initialValues",[2223,14389,4408],{"class":2328},[2223,14391,14392,14394,14397,14399,14401,14403,14406,14408,14410,14412,14414,14416,14418,14420],{"class":2225,"line":369},[2223,14393,5184],{"class":2900},[2223,14395,14396],{"class":2904}," errors",[2223,14398,2909],{"class":2908},[2223,14400,10564],{"class":2229},[2223,14402,3113],{"class":2328},[2223,14404,14405],{"class":3100},"Partial",[2223,14407,3113],{"class":2328},[2223,14409,14346],{"class":3100},[2223,14411,3113],{"class":2328},[2223,14413,14351],{"class":2900},[2223,14415,14265],{"class":3100},[2223,14417,269],{"class":2328},[2223,14419,2931],{"class":3137},[2223,14421,14422],{"class":2328},">>>({})\n",[2223,14424,14425,14427,14430,14432,14434,14436,14438,14440,14442,14444,14446,14448,14450,14452],{"class":2225,"line":2425},[2223,14426,5184],{"class":2900},[2223,14428,14429],{"class":2904}," touched",[2223,14431,2909],{"class":2908},[2223,14433,10564],{"class":2229},[2223,14435,3113],{"class":2328},[2223,14437,14405],{"class":3100},[2223,14439,3113],{"class":2328},[2223,14441,14346],{"class":3100},[2223,14443,3113],{"class":2328},[2223,14445,14351],{"class":2900},[2223,14447,14265],{"class":3100},[2223,14449,269],{"class":2328},[2223,14451,3045],{"class":3137},[2223,14453,14422],{"class":2328},[2223,14455,14456],{"class":2225,"line":1750},[2223,14457,2371],{"class":2328},[2223,14459,14460,14462,14465,14467,14470,14472,14475,14477,14479,14481,14484],{"class":2225,"line":2105},[2223,14461,11461],{"class":2900},[2223,14463,14464],{"class":2229}," validate",[2223,14466,3001],{"class":2328},[2223,14468,14469],{"class":3131},"field",[2223,14471,2300],{"class":2908},[2223,14473,14474],{"class":2900}," keyof",[2223,14476,14265],{"class":3100},[2223,14478,4000],{"class":2328},[2223,14480,2300],{"class":2908},[2223,14482,14483],{"class":3137}," boolean",[2223,14485,2379],{"class":2328},[2223,14487,14488,14490,14493,14495,14498,14501,14503],{"class":2225,"line":2449},[2223,14489,3673],{"class":2900},[2223,14491,14492],{"class":2904}," rules",[2223,14494,2909],{"class":2908},[2223,14496,14497],{"class":2334}," validationRules",[2223,14499,14500],{"class":2328},"[",[2223,14502,14469],{"class":2334},[2223,14504,14505],{"class":2328},"]\n",[2223,14507,14508,14511,14513,14515,14518,14520,14523],{"class":2225,"line":2454},[2223,14509,14510],{"class":2318},"    if",[2223,14512,3340],{"class":2328},[2223,14514,4435],{"class":2908},[2223,14516,14517],{"class":2334},"rules",[2223,14519,3350],{"class":2328},[2223,14521,14522],{"class":2318},"return",[2223,14524,11328],{"class":2546},[2223,14526,14527],{"class":2225,"line":1839},[2223,14528,4752],{"class":2328},[2223,14530,14531,14534,14536,14538,14541,14544,14546],{"class":2225,"line":2473},[2223,14532,14533],{"class":2318},"    for",[2223,14535,3340],{"class":2328},[2223,14537,3564],{"class":2900},[2223,14539,14540],{"class":2904}," rule",[2223,14542,14543],{"class":2900}," of",[2223,14545,14492],{"class":2334},[2223,14547,4444],{"class":2328},[2223,14549,14550,14553,14555,14557,14560,14562,14565,14567,14570,14572,14574],{"class":2225,"line":2483},[2223,14551,14552],{"class":2318},"      if",[2223,14554,3340],{"class":2328},[2223,14556,4435],{"class":2908},[2223,14558,14559],{"class":2334},"rule",[2223,14561,260],{"class":2328},[2223,14563,14564],{"class":2229},"validator",[2223,14566,3001],{"class":2328},[2223,14568,14569],{"class":2334},"values",[2223,14571,14500],{"class":2328},[2223,14573,14469],{"class":2334},[2223,14575,14576],{"class":2328},"])) {\n",[2223,14578,14579,14582,14584,14586,14589,14591,14593,14595],{"class":2225,"line":2493},[2223,14580,14581],{"class":2334},"        errors",[2223,14583,14500],{"class":2328},[2223,14585,14469],{"class":2334},[2223,14587,14588],{"class":2328},"] ",[2223,14590,3524],{"class":2908},[2223,14592,14540],{"class":2334},[2223,14594,260],{"class":2328},[2223,14596,14597],{"class":2334},"message\n",[2223,14599,14600,14603],{"class":2225,"line":2504},[2223,14601,14602],{"class":2318},"        return",[2223,14604,11444],{"class":2546},[2223,14606,14607],{"class":2225,"line":2510},[2223,14608,2507],{"class":2328},[2223,14610,14611],{"class":2225,"line":2516},[2223,14612,2604],{"class":2328},[2223,14614,14615],{"class":2225,"line":2526},[2223,14616,4752],{"class":2328},[2223,14618,14619,14622,14624,14626,14628],{"class":2225,"line":2540},[2223,14620,14621],{"class":2900},"    delete",[2223,14623,14396],{"class":2334},[2223,14625,14500],{"class":2328},[2223,14627,14469],{"class":2334},[2223,14629,14505],{"class":2328},[2223,14631,14632,14634],{"class":2225,"line":2552},[2223,14633,3696],{"class":2318},[2223,14635,11328],{"class":2546},[2223,14637,14638],{"class":2225,"line":2563},[2223,14639,2652],{"class":2328},[2223,14641,14642],{"class":2225,"line":2571},[2223,14643,2371],{"class":2328},[2223,14645,14646,14648,14651,14654,14656,14658],{"class":2225,"line":2581},[2223,14647,11461],{"class":2900},[2223,14649,14650],{"class":2229}," validateAll",[2223,14652,14653],{"class":2328},"()",[2223,14655,2300],{"class":2908},[2223,14657,14483],{"class":3137},[2223,14659,2379],{"class":2328},[2223,14661,14662,14665,14668,14670],{"class":2225,"line":2592},[2223,14663,14664],{"class":2900},"    let",[2223,14666,14667],{"class":2334}," isValid",[2223,14669,2909],{"class":2908},[2223,14671,11328],{"class":2546},[2223,14673,14674,14676,14678,14680,14683,14685,14687],{"class":2225,"line":2601},[2223,14675,14533],{"class":2318},[2223,14677,3340],{"class":2328},[2223,14679,3564],{"class":2900},[2223,14681,14682],{"class":2904}," field",[2223,14684,3949],{"class":2900},[2223,14686,14497],{"class":2334},[2223,14688,4444],{"class":2328},[2223,14690,14691,14693,14695,14697,14700,14702,14704,14706,14708,14710],{"class":2225,"line":2607},[2223,14692,14552],{"class":2318},[2223,14694,3340],{"class":2328},[2223,14696,4435],{"class":2908},[2223,14698,14699],{"class":2229},"validate",[2223,14701,3001],{"class":2328},[2223,14703,14469],{"class":2334},[2223,14705,4891],{"class":2318},[2223,14707,14474],{"class":2900},[2223,14709,14265],{"class":3100},[2223,14711,14712],{"class":2328},")) {\n",[2223,14714,14715,14718,14720],{"class":2225,"line":2613},[2223,14716,14717],{"class":2334},"        isValid",[2223,14719,2909],{"class":2908},[2223,14721,11444],{"class":2546},[2223,14723,14724],{"class":2225,"line":2619},[2223,14725,2507],{"class":2328},[2223,14727,14728],{"class":2225,"line":2627},[2223,14729,2604],{"class":2328},[2223,14731,14732,14734],{"class":2225,"line":2635},[2223,14733,3696],{"class":2318},[2223,14735,14736],{"class":2334}," isValid\n",[2223,14738,14739],{"class":2225,"line":2644},[2223,14740,2652],{"class":2328},[2223,14742,14743],{"class":2225,"line":2649},[2223,14744,2371],{"class":2328},[2223,14746,14747,14749,14752,14754,14756,14758,14760,14762],{"class":2225,"line":2655},[2223,14748,11461],{"class":2900},[2223,14750,14751],{"class":2229}," handleBlur",[2223,14753,3001],{"class":2328},[2223,14755,14469],{"class":3131},[2223,14757,2300],{"class":2908},[2223,14759,14474],{"class":2900},[2223,14761,14265],{"class":3100},[2223,14763,4444],{"class":2328},[2223,14765,14766,14769,14771,14773,14775,14777],{"class":2225,"line":3384},[2223,14767,14768],{"class":2334},"    touched",[2223,14770,14500],{"class":2328},[2223,14772,14469],{"class":2334},[2223,14774,14588],{"class":2328},[2223,14776,3524],{"class":2908},[2223,14778,11328],{"class":2546},[2223,14780,14781,14784,14786,14788],{"class":2225,"line":3389},[2223,14782,14783],{"class":2229},"    validate",[2223,14785,3001],{"class":2328},[2223,14787,14469],{"class":2334},[2223,14789,4947],{"class":2328},[2223,14791,14792],{"class":2225,"line":3415},[2223,14793,2652],{"class":2328},[2223,14795,14796],{"class":2225,"line":3433},[2223,14797,2371],{"class":2328},[2223,14799,14800,14802,14805,14807,14809,14811,14813,14815,14817,14819,14821,14824],{"class":2225,"line":3438},[2223,14801,11461],{"class":2900},[2223,14803,14804],{"class":2229}," handleChange",[2223,14806,3001],{"class":2328},[2223,14808,14469],{"class":3131},[2223,14810,2300],{"class":2908},[2223,14812,14474],{"class":2900},[2223,14814,14265],{"class":3100},[2223,14816,269],{"class":2328},[2223,14818,3649],{"class":3131},[2223,14820,2300],{"class":2908},[2223,14822,14823],{"class":3137}," any",[2223,14825,4444],{"class":2328},[2223,14827,14828,14831,14833,14835,14837,14839],{"class":2225,"line":3443},[2223,14829,14830],{"class":2334},"    values",[2223,14832,14500],{"class":2328},[2223,14834,14469],{"class":2334},[2223,14836,14588],{"class":2328},[2223,14838,3524],{"class":2908},[2223,14840,14841],{"class":2334}," value\n",[2223,14843,14844,14846,14848,14851,14853,14855],{"class":2225,"line":3469},[2223,14845,14510],{"class":2318},[2223,14847,3340],{"class":2328},[2223,14849,14850],{"class":2334},"touched",[2223,14852,14500],{"class":2328},[2223,14854,14469],{"class":2334},[2223,14856,14857],{"class":2328},"]) {\n",[2223,14859,14860,14863,14865,14867],{"class":2225,"line":3487},[2223,14861,14862],{"class":2229},"      validate",[2223,14864,3001],{"class":2328},[2223,14866,14469],{"class":2334},[2223,14868,4947],{"class":2328},[2223,14870,14871],{"class":2225,"line":4215},[2223,14872,2604],{"class":2328},[2223,14874,14876],{"class":2225,"line":14875},52,[2223,14877,2652],{"class":2328},[2223,14879,14881],{"class":2225,"line":14880},53,[2223,14882,2371],{"class":2328},[2223,14884,14886,14888,14890],{"class":2225,"line":14885},54,[2223,14887,11461],{"class":2900},[2223,14889,8929],{"class":2229},[2223,14891,10759],{"class":2328},[2223,14893,14895,14898,14900,14903,14905,14907,14909,14911],{"class":2225,"line":14894},55,[2223,14896,14897],{"class":2334},"    Object",[2223,14899,260],{"class":2328},[2223,14901,14902],{"class":2229},"assign",[2223,14904,3001],{"class":2328},[2223,14906,14569],{"class":2334},[2223,14908,269],{"class":2328},[2223,14910,14387],{"class":2334},[2223,14912,4947],{"class":2328},[2223,14914,14916,14918,14920,14923,14925,14928,14930,14933,14935,14937,14939,14942,14944,14946,14948,14950,14952,14954],{"class":2225,"line":14915},56,[2223,14917,14897],{"class":2334},[2223,14919,260],{"class":2328},[2223,14921,14922],{"class":2229},"keys",[2223,14924,3001],{"class":2328},[2223,14926,14927],{"class":2334},"errors",[2223,14929,3707],{"class":2328},[2223,14931,14932],{"class":2229},"forEach",[2223,14934,3001],{"class":2328},[2223,14936,3962],{"class":3131},[2223,14938,3788],{"class":2900},[2223,14940,14941],{"class":2900}," delete",[2223,14943,14396],{"class":2334},[2223,14945,14500],{"class":2328},[2223,14947,3962],{"class":2334},[2223,14949,4891],{"class":2318},[2223,14951,14474],{"class":2900},[2223,14953,14265],{"class":3100},[2223,14955,14956],{"class":2328},"])\n",[2223,14958,14960,14962,14964,14966,14968,14970,14972,14974,14976,14978,14980,14982,14984,14986,14988,14990,14992,14994],{"class":2225,"line":14959},57,[2223,14961,14897],{"class":2334},[2223,14963,260],{"class":2328},[2223,14965,14922],{"class":2229},[2223,14967,3001],{"class":2328},[2223,14969,14850],{"class":2334},[2223,14971,3707],{"class":2328},[2223,14973,14932],{"class":2229},[2223,14975,3001],{"class":2328},[2223,14977,3962],{"class":3131},[2223,14979,3788],{"class":2900},[2223,14981,14941],{"class":2900},[2223,14983,14429],{"class":2334},[2223,14985,14500],{"class":2328},[2223,14987,3962],{"class":2334},[2223,14989,4891],{"class":2318},[2223,14991,14474],{"class":2900},[2223,14993,14265],{"class":3100},[2223,14995,14956],{"class":2328},[2223,14997,14999],{"class":2225,"line":14998},58,[2223,15000,2652],{"class":2328},[2223,15002,15004],{"class":2225,"line":15003},59,[2223,15005,2371],{"class":2328},[2223,15007,15009,15011,15013,15015,15017,15019,15021,15024,15026,15028,15030,15032,15034,15037,15039,15041],{"class":2225,"line":15008},60,[2223,15010,5184],{"class":2900},[2223,15012,14667],{"class":2904},[2223,15014,2909],{"class":2908},[2223,15016,3757],{"class":2229},[2223,15018,3760],{"class":2328},[2223,15020,3353],{"class":2900},[2223,15022,15023],{"class":2334}," Object",[2223,15025,260],{"class":2328},[2223,15027,14922],{"class":2229},[2223,15029,3001],{"class":2328},[2223,15031,14927],{"class":2334},[2223,15033,3707],{"class":2328},[2223,15035,15036],{"class":6878},"length",[2223,15038,5697],{"class":2908},[2223,15040,10872],{"class":4463},[2223,15042,4947],{"class":2328},[2223,15044,15046,15048,15051,15053,15055,15057,15059],{"class":2225,"line":15045},61,[2223,15047,5184],{"class":2900},[2223,15049,15050],{"class":2904}," isDirty",[2223,15052,2909],{"class":2908},[2223,15054,3757],{"class":2229},[2223,15056,3760],{"class":2328},[2223,15058,3353],{"class":2900},[2223,15060,3765],{"class":2328},[2223,15062,15064,15067,15069,15072,15074,15076,15078,15081,15084,15086,15088,15090,15092],{"class":2225,"line":15063},62,[2223,15065,15066],{"class":2904},"    JSON",[2223,15068,260],{"class":2328},[2223,15070,15071],{"class":2229},"stringify",[2223,15073,3001],{"class":2328},[2223,15075,14569],{"class":2334},[2223,15077,3350],{"class":2328},[2223,15079,15080],{"class":2908},"!==",[2223,15082,15083],{"class":2904}," JSON",[2223,15085,260],{"class":2328},[2223,15087,15071],{"class":2229},[2223,15089,3001],{"class":2328},[2223,15091,14387],{"class":2334},[2223,15093,4947],{"class":2328},[2223,15095,15097],{"class":2225,"line":15096},63,[2223,15098,15099],{"class":2328},"  )\n",[2223,15101,15103],{"class":2225,"line":15102},64,[2223,15104,2371],{"class":2328},[2223,15106,15108,15110],{"class":2225,"line":15107},65,[2223,15109,3360],{"class":2318},[2223,15111,2379],{"class":2328},[2223,15113,15115,15117],{"class":2225,"line":15114},66,[2223,15116,14830],{"class":2334},[2223,15118,2347],{"class":2328},[2223,15120,15122,15125],{"class":2225,"line":15121},67,[2223,15123,15124],{"class":2334},"    errors",[2223,15126,2347],{"class":2328},[2223,15128,15130,15132],{"class":2225,"line":15129},68,[2223,15131,14768],{"class":2334},[2223,15133,2347],{"class":2328},[2223,15135,15137,15140],{"class":2225,"line":15136},69,[2223,15138,15139],{"class":2334},"    isValid",[2223,15141,2347],{"class":2328},[2223,15143,15145,15148],{"class":2225,"line":15144},70,[2223,15146,15147],{"class":2334},"    isDirty",[2223,15149,2347],{"class":2328},[2223,15151,15153,15155],{"class":2225,"line":15152},71,[2223,15154,14783],{"class":2334},[2223,15156,2347],{"class":2328},[2223,15158,15160,15163],{"class":2225,"line":15159},72,[2223,15161,15162],{"class":2334},"    validateAll",[2223,15164,2347],{"class":2328},[2223,15166,15168,15171],{"class":2225,"line":15167},73,[2223,15169,15170],{"class":2334},"    handleBlur",[2223,15172,2347],{"class":2328},[2223,15174,15176,15179],{"class":2225,"line":15175},74,[2223,15177,15178],{"class":2334},"    handleChange",[2223,15180,2347],{"class":2328},[2223,15182,15184],{"class":2225,"line":15183},75,[2223,15185,15186],{"class":2334},"    reset\n",[2223,15188,15190],{"class":2225,"line":15189},76,[2223,15191,2652],{"class":2328},[2223,15193,15195],{"class":2225,"line":15194},77,[2223,15196,4487],{"class":2328},[12,15198,15199],{},"Usage in component:",[2214,15201,15203],{"className":3501,"code":15202,"language":3503,"meta":24,"style":24},"\u003Cscript setup lang=\"ts\">\nimport { useForm } from '@/composables/useForm'\n\ninterface LoginForm {\n  email: string\n  password: string\n}\n\nconst { values, errors, touched, isValid, handleChange, handleBlur, validateAll } = useForm\u003CLoginForm>(\n  {\n    email: '',\n    password: ''\n  },\n  {\n    email: [\n      {\n        validator: (v) => !!v,\n        message: 'Email is required'\n      },\n      {\n        validator: (v) => /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(v),\n        message: 'Invalid email format'\n      }\n    ],\n    password: [\n      {\n        validator: (v) => v.length >= 8,\n        message: 'Password must be at least 8 characters'\n      }\n    ]\n  }\n)\n\nasync function handleSubmit() {\n  if (!validateAll()) return\n  \n  // Submit form\n  console.log('Submitting:', values)\n}\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cform @submit.prevent=\"handleSubmit\">\n    \u003Cdiv>\n      \u003Cinput\n        :value=\"values.email\"\n        @input=\"handleChange('email', ($event.target as HTMLInputElement).value)\"\n        @blur=\"handleBlur('email')\"\n        type=\"email\"\n        placeholder=\"Email\"\n      />\n      \u003Cspan v-if=\"touched.email && errors.email\" class=\"error\">\n        {{ errors.email }}\n      \u003C/span>\n    \u003C/div>\n    \n    \u003Cdiv>\n      \u003Cinput\n        :value=\"values.password\"\n        @input=\"handleChange('password', ($event.target as HTMLInputElement).value)\"\n        @blur=\"handleBlur('password')\"\n        type=\"password\"\n        placeholder=\"Password\"\n      />\n      \u003Cspan v-if=\"touched.password && errors.password\" class=\"error\">\n        {{ errors.password }}\n      \u003C/span>\n    \u003C/div>\n    \n    \u003Cbutton type=\"submit\" :disabled=\"!isValid\">Login\u003C/button>\n  \u003C/form>\n\u003C/template>\n",[2220,15204,15205,15221,15237,15241,15250,15259,15268,15272,15276,15325,15330,15340,15348,15352,15356,15362,15366,15388,15396,15400,15404,15485,15492,15496,15500,15506,15510,15539,15546,15550,15555,15559,15563,15567,15578,15595,15599,15604,15623,15627,15635,15639,15647,15675,15683,15690,15710,15751,15772,15782,15792,15797,15835,15847,15855,15863,15867,15875,15881,15900,15937,15957,15966,15975,15979,16015,16027,16035,16043,16047,16085,16093],{"__ignoreMap":24},[2223,15206,15207,15209,15211,15213,15215,15217,15219],{"class":2225,"line":2226},[2223,15208,3113],{"class":3510},[2223,15210,3514],{"class":3513},[2223,15212,3518],{"class":3517},[2223,15214,3521],{"class":3517},[2223,15216,3524],{"class":2328},[2223,15218,3527],{"class":2233},[2223,15220,3530],{"class":3510},[2223,15222,15223,15225,15227,15230,15232,15234],{"class":2225,"line":28},[2223,15224,2871],{"class":2318},[2223,15226,2874],{"class":2328},[2223,15228,15229],{"class":2334},"useForm",[2223,15231,2880],{"class":2328},[2223,15233,2883],{"class":2318},[2223,15235,15236],{"class":2233}," '@/composables/useForm'\n",[2223,15238,15239],{"class":2225,"line":25},[2223,15240,2616],{"emptyLinePlaceholder":33},[2223,15242,15243,15245,15248],{"class":2225,"line":2341},[2223,15244,12747],{"class":2900},[2223,15246,15247],{"class":3100}," LoginForm",[2223,15249,2379],{"class":2328},[2223,15251,15252,15255,15257],{"class":2225,"line":336},[2223,15253,15254],{"class":3131},"  email",[2223,15256,2300],{"class":2908},[2223,15258,12761],{"class":3137},[2223,15260,15261,15264,15266],{"class":2225,"line":2357},[2223,15262,15263],{"class":3131},"  password",[2223,15265,2300],{"class":2908},[2223,15267,12761],{"class":3137},[2223,15269,15270],{"class":2225,"line":2363},[2223,15271,4487],{"class":2328},[2223,15273,15274],{"class":2225,"line":2074},[2223,15275,2616],{"emptyLinePlaceholder":33},[2223,15277,15278,15280,15282,15284,15286,15288,15290,15292,15294,15297,15299,15302,15304,15307,15309,15312,15314,15316,15318,15320,15323],{"class":2225,"line":43},[2223,15279,3564],{"class":2900},[2223,15281,2874],{"class":2328},[2223,15283,14569],{"class":2904},[2223,15285,269],{"class":2328},[2223,15287,14927],{"class":2904},[2223,15289,269],{"class":2328},[2223,15291,14850],{"class":2904},[2223,15293,269],{"class":2328},[2223,15295,15296],{"class":2904},"isValid",[2223,15298,269],{"class":2328},[2223,15300,15301],{"class":2904},"handleChange",[2223,15303,269],{"class":2328},[2223,15305,15306],{"class":2904},"handleBlur",[2223,15308,269],{"class":2328},[2223,15310,15311],{"class":2904},"validateAll",[2223,15313,2880],{"class":2328},[2223,15315,3524],{"class":2908},[2223,15317,14298],{"class":2229},[2223,15319,3113],{"class":2328},[2223,15321,15322],{"class":3100},"LoginForm",[2223,15324,5235],{"class":2328},[2223,15326,15327],{"class":2225,"line":2382},[2223,15328,15329],{"class":2328},"  {\n",[2223,15331,15332,15335,15338],{"class":2225,"line":1784},[2223,15333,15334],{"class":2334},"    email:",[2223,15336,15337],{"class":2233}," ''",[2223,15339,2347],{"class":2328},[2223,15341,15342,15345],{"class":2225,"line":82},[2223,15343,15344],{"class":2334},"    password:",[2223,15346,15347],{"class":2233}," ''\n",[2223,15349,15350],{"class":2225,"line":1432},[2223,15351,2610],{"class":2328},[2223,15353,15354],{"class":2225,"line":369},[2223,15355,15329],{"class":2328},[2223,15357,15358,15360],{"class":2225,"line":2425},[2223,15359,15334],{"class":2334},[2223,15361,2338],{"class":2328},[2223,15363,15364],{"class":2225,"line":1750},[2223,15365,2392],{"class":2328},[2223,15367,15368,15371,15373,15375,15378,15380,15382,15384,15386],{"class":2225,"line":2105},[2223,15369,15370],{"class":2229},"        validator",[2223,15372,2300],{"class":2334},[2223,15374,3340],{"class":2328},[2223,15376,15377],{"class":3131},"v",[2223,15379,3350],{"class":2328},[2223,15381,3353],{"class":2900},[2223,15383,11244],{"class":2908},[2223,15385,15377],{"class":2334},[2223,15387,2347],{"class":2328},[2223,15389,15390,15393],{"class":2225,"line":2449},[2223,15391,15392],{"class":2334},"        message:",[2223,15394,15395],{"class":2233}," 'Email is required'\n",[2223,15397,15398],{"class":2225,"line":2454},[2223,15399,2446],{"class":2328},[2223,15401,15402],{"class":2225,"line":1839},[2223,15403,2392],{"class":2328},[2223,15405,15406,15408,15410,15412,15414,15416,15418,15421,15425,15427,15430,15434,15437,15441,15444,15446,15448,15450,15452,15454,15458,15460,15462,15464,15466,15468,15471,15474,15476,15479,15481,15483],{"class":2225,"line":2473},[2223,15407,15370],{"class":2229},[2223,15409,2300],{"class":2334},[2223,15411,3340],{"class":2328},[2223,15413,15377],{"class":3131},[2223,15415,3350],{"class":2328},[2223,15417,3353],{"class":2900},[2223,15419,14099],{"class":15420},"s4XyT",[2223,15422,15424],{"class":15423},"s2gen","^",[2223,15426,14500],{"class":5963},[2223,15428,15424],{"class":15429},"smwCX",[2223,15431,15433],{"class":15432},"suOk-","\\s@",[2223,15435,15436],{"class":5963},"]",[2223,15438,15440],{"class":15439},"sR-fR","+",[2223,15442,15443],{"class":15420},"@",[2223,15445,14500],{"class":5963},[2223,15447,15424],{"class":15429},[2223,15449,15433],{"class":15432},[2223,15451,15436],{"class":5963},[2223,15453,15440],{"class":15439},[2223,15455,15457],{"class":15456},"sSxZ1","\\.",[2223,15459,14500],{"class":5963},[2223,15461,15424],{"class":15429},[2223,15463,15433],{"class":15432},[2223,15465,15436],{"class":5963},[2223,15467,15440],{"class":15439},[2223,15469,15470],{"class":15423},"$",[2223,15472,15473],{"class":15420},"/",[2223,15475,260],{"class":2328},[2223,15477,15478],{"class":2229},"test",[2223,15480,3001],{"class":2328},[2223,15482,15377],{"class":2334},[2223,15484,5883],{"class":2328},[2223,15486,15487,15489],{"class":2225,"line":2483},[2223,15488,15392],{"class":2334},[2223,15490,15491],{"class":2233}," 'Invalid email format'\n",[2223,15493,15494],{"class":2225,"line":2493},[2223,15495,2507],{"class":2328},[2223,15497,15498],{"class":2225,"line":2504},[2223,15499,2513],{"class":2328},[2223,15501,15502,15504],{"class":2225,"line":2510},[2223,15503,15344],{"class":2334},[2223,15505,2338],{"class":2328},[2223,15507,15508],{"class":2225,"line":2516},[2223,15509,2392],{"class":2328},[2223,15511,15512,15514,15516,15518,15520,15522,15524,15527,15529,15531,15534,15537],{"class":2225,"line":2526},[2223,15513,15370],{"class":2229},[2223,15515,2300],{"class":2334},[2223,15517,3340],{"class":2328},[2223,15519,15377],{"class":3131},[2223,15521,3350],{"class":2328},[2223,15523,3353],{"class":2900},[2223,15525,15526],{"class":2334}," v",[2223,15528,260],{"class":2328},[2223,15530,15036],{"class":6878},[2223,15532,15533],{"class":2908}," >=",[2223,15535,15536],{"class":4463}," 8",[2223,15538,2347],{"class":2328},[2223,15540,15541,15543],{"class":2225,"line":2540},[2223,15542,15392],{"class":2334},[2223,15544,15545],{"class":2233}," 'Password must be at least 8 characters'\n",[2223,15547,15548],{"class":2225,"line":2552},[2223,15549,2507],{"class":2328},[2223,15551,15552],{"class":2225,"line":2563},[2223,15553,15554],{"class":2328},"    ]\n",[2223,15556,15557],{"class":2225,"line":2571},[2223,15558,2652],{"class":2328},[2223,15560,15561],{"class":2225,"line":2581},[2223,15562,4947],{"class":2328},[2223,15564,15565],{"class":2225,"line":2592},[2223,15566,2616],{"emptyLinePlaceholder":33},[2223,15568,15569,15571,15573,15576],{"class":2225,"line":2601},[2223,15570,11700],{"class":2900},[2223,15572,10859],{"class":2900},[2223,15574,15575],{"class":2229}," handleSubmit",[2223,15577,10759],{"class":2328},[2223,15579,15580,15583,15585,15587,15589,15592],{"class":2225,"line":2607},[2223,15581,15582],{"class":2318},"  if",[2223,15584,3340],{"class":2328},[2223,15586,4435],{"class":2908},[2223,15588,15311],{"class":2229},[2223,15590,15591],{"class":2328},"()) ",[2223,15593,15594],{"class":2318},"return\n",[2223,15596,15597],{"class":2225,"line":2613},[2223,15598,2371],{"class":2328},[2223,15600,15601],{"class":2225,"line":2619},[2223,15602,15603],{"class":2312},"  // Submit form\n",[2223,15605,15606,15608,15610,15612,15614,15617,15619,15621],{"class":2225,"line":2627},[2223,15607,10660],{"class":2334},[2223,15609,260],{"class":2328},[2223,15611,10665],{"class":2229},[2223,15613,3001],{"class":2328},[2223,15615,15616],{"class":2233},"'Submitting:'",[2223,15618,269],{"class":2328},[2223,15620,14569],{"class":2334},[2223,15622,4947],{"class":2328},[2223,15624,15625],{"class":2225,"line":2635},[2223,15626,4487],{"class":2328},[2223,15628,15629,15631,15633],{"class":2225,"line":2644},[2223,15630,3813],{"class":3510},[2223,15632,3514],{"class":3513},[2223,15634,3530],{"class":3510},[2223,15636,15637],{"class":2225,"line":2649},[2223,15638,2616],{"emptyLinePlaceholder":33},[2223,15640,15641,15643,15645],{"class":2225,"line":2655},[2223,15642,3113],{"class":3510},[2223,15644,3828],{"class":3513},[2223,15646,3530],{"class":3510},[2223,15648,15649,15651,15654,15656,15659,15661,15664,15666,15668,15671,15673],{"class":2225,"line":3384},[2223,15650,3835],{"class":3510},[2223,15652,15653],{"class":3513},"form",[2223,15655,11836],{"class":2328},[2223,15657,15658],{"class":3517},"submit",[2223,15660,260],{"class":2328},[2223,15662,15663],{"class":3517},"prevent",[2223,15665,3524],{"class":2328},[2223,15667,3944],{"class":3646},[2223,15669,15670],{"class":2334},"handleSubmit",[2223,15672,3944],{"class":3646},[2223,15674,3530],{"class":3510},[2223,15676,15677,15679,15681],{"class":2225,"line":3389},[2223,15678,3845],{"class":3510},[2223,15680,3917],{"class":3513},[2223,15682,3530],{"class":3510},[2223,15684,15685,15687],{"class":2225,"line":3415},[2223,15686,3863],{"class":3510},[2223,15688,15689],{"class":3513},"input\n",[2223,15691,15692,15695,15697,15699,15701,15703,15705,15708],{"class":2225,"line":3433},[2223,15693,15694],{"class":2328},"        :",[2223,15696,3649],{"class":3517},[2223,15698,3524],{"class":2328},[2223,15700,3944],{"class":3646},[2223,15702,14569],{"class":2334},[2223,15704,260],{"class":2328},[2223,15706,15707],{"class":2334},"email",[2223,15709,3954],{"class":3646},[2223,15711,15712,15715,15717,15719,15721,15723,15725,15728,15730,15733,15735,15738,15740,15743,15745,15747,15749],{"class":2225,"line":3438},[2223,15713,15714],{"class":2328},"        @",[2223,15716,10076],{"class":3517},[2223,15718,3524],{"class":2328},[2223,15720,3944],{"class":3646},[2223,15722,15301],{"class":2229},[2223,15724,3001],{"class":2328},[2223,15726,15727],{"class":2233},"'email'",[2223,15729,10641],{"class":2328},[2223,15731,15732],{"class":2334},"$event",[2223,15734,260],{"class":2328},[2223,15736,15737],{"class":2334},"target",[2223,15739,4891],{"class":2318},[2223,15741,15742],{"class":3100}," HTMLInputElement",[2223,15744,3707],{"class":2328},[2223,15746,3649],{"class":2334},[2223,15748,4000],{"class":2328},[2223,15750,3954],{"class":3646},[2223,15752,15753,15755,15758,15760,15762,15764,15766,15768,15770],{"class":2225,"line":3443},[2223,15754,15714],{"class":2328},[2223,15756,15757],{"class":3517},"blur",[2223,15759,3524],{"class":2328},[2223,15761,3944],{"class":3646},[2223,15763,15306],{"class":2229},[2223,15765,3001],{"class":2328},[2223,15767,15727],{"class":2233},[2223,15769,4000],{"class":2328},[2223,15771,3954],{"class":3646},[2223,15773,15774,15777,15779],{"class":2225,"line":3469},[2223,15775,15776],{"class":3517},"        type",[2223,15778,3524],{"class":2328},[2223,15780,15781],{"class":2233},"\"email\"\n",[2223,15783,15784,15787,15789],{"class":2225,"line":3487},[2223,15785,15786],{"class":3517},"        placeholder",[2223,15788,3524],{"class":2328},[2223,15790,15791],{"class":2233},"\"Email\"\n",[2223,15793,15794],{"class":2225,"line":4215},[2223,15795,15796],{"class":3510},"      />\n",[2223,15798,15799,15801,15803,15805,15807,15809,15811,15813,15815,15818,15820,15822,15824,15826,15828,15830,15833],{"class":2225,"line":14875},[2223,15800,3863],{"class":3510},[2223,15802,2223],{"class":3513},[2223,15804,11794],{"class":2318},[2223,15806,3524],{"class":2328},[2223,15808,3944],{"class":3646},[2223,15810,14850],{"class":2334},[2223,15812,260],{"class":2328},[2223,15814,15707],{"class":2334},[2223,15816,15817],{"class":2908}," &&",[2223,15819,14396],{"class":2334},[2223,15821,260],{"class":2328},[2223,15823,15707],{"class":2334},[2223,15825,3944],{"class":3646},[2223,15827,3851],{"class":3517},[2223,15829,3524],{"class":2328},[2223,15831,15832],{"class":2233},"\"error\"",[2223,15834,3530],{"class":3510},[2223,15836,15837,15839,15841,15843,15845],{"class":2225,"line":14880},[2223,15838,3880],{"class":2328},[2223,15840,14927],{"class":2334},[2223,15842,260],{"class":2328},[2223,15844,15707],{"class":2334},[2223,15846,5082],{"class":2328},[2223,15848,15849,15851,15853],{"class":2225,"line":14885},[2223,15850,3896],{"class":3510},[2223,15852,2223],{"class":3513},[2223,15854,3530],{"class":3510},[2223,15856,15857,15859,15861],{"class":2225,"line":14894},[2223,15858,4199],{"class":3510},[2223,15860,3917],{"class":3513},[2223,15862,3530],{"class":3510},[2223,15864,15865],{"class":2225,"line":14915},[2223,15866,4752],{"class":2328},[2223,15868,15869,15871,15873],{"class":2225,"line":14959},[2223,15870,3845],{"class":3510},[2223,15872,3917],{"class":3513},[2223,15874,3530],{"class":3510},[2223,15876,15877,15879],{"class":2225,"line":14998},[2223,15878,3863],{"class":3510},[2223,15880,15689],{"class":3513},[2223,15882,15883,15885,15887,15889,15891,15893,15895,15898],{"class":2225,"line":15003},[2223,15884,15694],{"class":2328},[2223,15886,3649],{"class":3517},[2223,15888,3524],{"class":2328},[2223,15890,3944],{"class":3646},[2223,15892,14569],{"class":2334},[2223,15894,260],{"class":2328},[2223,15896,15897],{"class":2334},"password",[2223,15899,3954],{"class":3646},[2223,15901,15902,15904,15906,15908,15910,15912,15914,15917,15919,15921,15923,15925,15927,15929,15931,15933,15935],{"class":2225,"line":15008},[2223,15903,15714],{"class":2328},[2223,15905,10076],{"class":3517},[2223,15907,3524],{"class":2328},[2223,15909,3944],{"class":3646},[2223,15911,15301],{"class":2229},[2223,15913,3001],{"class":2328},[2223,15915,15916],{"class":2233},"'password'",[2223,15918,10641],{"class":2328},[2223,15920,15732],{"class":2334},[2223,15922,260],{"class":2328},[2223,15924,15737],{"class":2334},[2223,15926,4891],{"class":2318},[2223,15928,15742],{"class":3100},[2223,15930,3707],{"class":2328},[2223,15932,3649],{"class":2334},[2223,15934,4000],{"class":2328},[2223,15936,3954],{"class":3646},[2223,15938,15939,15941,15943,15945,15947,15949,15951,15953,15955],{"class":2225,"line":15045},[2223,15940,15714],{"class":2328},[2223,15942,15757],{"class":3517},[2223,15944,3524],{"class":2328},[2223,15946,3944],{"class":3646},[2223,15948,15306],{"class":2229},[2223,15950,3001],{"class":2328},[2223,15952,15916],{"class":2233},[2223,15954,4000],{"class":2328},[2223,15956,3954],{"class":3646},[2223,15958,15959,15961,15963],{"class":2225,"line":15063},[2223,15960,15776],{"class":3517},[2223,15962,3524],{"class":2328},[2223,15964,15965],{"class":2233},"\"password\"\n",[2223,15967,15968,15970,15972],{"class":2225,"line":15096},[2223,15969,15786],{"class":3517},[2223,15971,3524],{"class":2328},[2223,15973,15974],{"class":2233},"\"Password\"\n",[2223,15976,15977],{"class":2225,"line":15102},[2223,15978,15796],{"class":3510},[2223,15980,15981,15983,15985,15987,15989,15991,15993,15995,15997,15999,16001,16003,16005,16007,16009,16011,16013],{"class":2225,"line":15107},[2223,15982,3863],{"class":3510},[2223,15984,2223],{"class":3513},[2223,15986,11794],{"class":2318},[2223,15988,3524],{"class":2328},[2223,15990,3944],{"class":3646},[2223,15992,14850],{"class":2334},[2223,15994,260],{"class":2328},[2223,15996,15897],{"class":2334},[2223,15998,15817],{"class":2908},[2223,16000,14396],{"class":2334},[2223,16002,260],{"class":2328},[2223,16004,15897],{"class":2334},[2223,16006,3944],{"class":3646},[2223,16008,3851],{"class":3517},[2223,16010,3524],{"class":2328},[2223,16012,15832],{"class":2233},[2223,16014,3530],{"class":3510},[2223,16016,16017,16019,16021,16023,16025],{"class":2225,"line":15114},[2223,16018,3880],{"class":2328},[2223,16020,14927],{"class":2334},[2223,16022,260],{"class":2328},[2223,16024,15897],{"class":2334},[2223,16026,5082],{"class":2328},[2223,16028,16029,16031,16033],{"class":2225,"line":15121},[2223,16030,3896],{"class":3510},[2223,16032,2223],{"class":3513},[2223,16034,3530],{"class":3510},[2223,16036,16037,16039,16041],{"class":2225,"line":15129},[2223,16038,4199],{"class":3510},[2223,16040,3917],{"class":3513},[2223,16042,3530],{"class":3510},[2223,16044,16045],{"class":2225,"line":15136},[2223,16046,4752],{"class":2328},[2223,16048,16049,16051,16053,16055,16057,16060,16062,16065,16067,16069,16071,16073,16075,16077,16079,16081,16083],{"class":2225,"line":15144},[2223,16050,3845],{"class":3510},[2223,16052,11833],{"class":3513},[2223,16054,3097],{"class":3517},[2223,16056,3524],{"class":2328},[2223,16058,16059],{"class":2233},"\"submit\"",[2223,16061,4762],{"class":2328},[2223,16063,16064],{"class":3517},"disabled",[2223,16066,3524],{"class":2328},[2223,16068,3944],{"class":3646},[2223,16070,4435],{"class":2908},[2223,16072,15296],{"class":2334},[2223,16074,3944],{"class":3646},[2223,16076,4117],{"class":3510},[2223,16078,11901],{"class":2328},[2223,16080,3813],{"class":3510},[2223,16082,11833],{"class":3513},[2223,16084,3530],{"class":3510},[2223,16086,16087,16089,16091],{"class":2225,"line":15152},[2223,16088,4208],{"class":3510},[2223,16090,15653],{"class":3513},[2223,16092,3530],{"class":3510},[2223,16094,16095,16097,16099],{"class":2225,"line":15159},[2223,16096,3813],{"class":3510},[2223,16098,3828],{"class":3513},[2223,16100,3530],{"class":3510},[16,16102,16104],{"id":16103},"_9-performance-optimization-patterns","9. Performance Optimization Patterns",[116,16106,16108],{"id":16107},"lazy-loading-components","Lazy Loading Components",[2214,16110,16112],{"className":3501,"code":16111,"language":3503,"meta":24,"style":24},"\u003Cscript setup lang=\"ts\">\nimport { defineAsyncComponent } from 'vue'\n\n// Lazy load heavy components\nconst HeavyChart = defineAsyncComponent(() =>\n  import('@/components/HeavyChart.vue')\n)\n\nconst AdminPanel = defineAsyncComponent({\n  loader: () => import('@/components/AdminPanel.vue'),\n  loadingComponent: LoadingSpinner,\n  errorComponent: ErrorDisplay,\n  delay: 200,\n  timeout: 3000\n})\n\u003C/script>\n",[2220,16113,16114,16130,16144,16148,16153,16168,16180,16184,16188,16201,16221,16231,16241,16251,16259,16263],{"__ignoreMap":24},[2223,16115,16116,16118,16120,16122,16124,16126,16128],{"class":2225,"line":2226},[2223,16117,3113],{"class":3510},[2223,16119,3514],{"class":3513},[2223,16121,3518],{"class":3517},[2223,16123,3521],{"class":3517},[2223,16125,3524],{"class":2328},[2223,16127,3527],{"class":2233},[2223,16129,3530],{"class":3510},[2223,16131,16132,16134,16136,16138,16140,16142],{"class":2225,"line":28},[2223,16133,2871],{"class":2318},[2223,16135,2874],{"class":2328},[2223,16137,12276],{"class":2334},[2223,16139,2880],{"class":2328},[2223,16141,2883],{"class":2318},[2223,16143,11138],{"class":2233},[2223,16145,16146],{"class":2225,"line":25},[2223,16147,2616],{"emptyLinePlaceholder":33},[2223,16149,16150],{"class":2225,"line":2341},[2223,16151,16152],{"class":2312},"// Lazy load heavy components\n",[2223,16154,16155,16157,16160,16162,16164,16166],{"class":2225,"line":336},[2223,16156,3564],{"class":2900},[2223,16158,16159],{"class":2904}," HeavyChart",[2223,16161,2909],{"class":2908},[2223,16163,12445],{"class":2229},[2223,16165,3760],{"class":2328},[2223,16167,4381],{"class":2900},[2223,16169,16170,16173,16175,16178],{"class":2225,"line":2357},[2223,16171,16172],{"class":2900},"  import",[2223,16174,3001],{"class":2328},[2223,16176,16177],{"class":2233},"'@/components/HeavyChart.vue'",[2223,16179,4947],{"class":2328},[2223,16181,16182],{"class":2225,"line":2363},[2223,16183,4947],{"class":2328},[2223,16185,16186],{"class":2225,"line":2074},[2223,16187,2616],{"emptyLinePlaceholder":33},[2223,16189,16190,16192,16195,16197,16199],{"class":2225,"line":43},[2223,16191,3564],{"class":2900},[2223,16193,16194],{"class":2904}," AdminPanel",[2223,16196,2909],{"class":2908},[2223,16198,12445],{"class":2229},[2223,16200,2329],{"class":2328},[2223,16202,16203,16206,16208,16210,16212,16214,16216,16219],{"class":2225,"line":2382},[2223,16204,16205],{"class":2229},"  loader",[2223,16207,2300],{"class":2334},[2223,16209,3664],{"class":2328},[2223,16211,3353],{"class":2900},[2223,16213,12456],{"class":2900},[2223,16215,3001],{"class":2328},[2223,16217,16218],{"class":2233},"'@/components/AdminPanel.vue'",[2223,16220,5883],{"class":2328},[2223,16222,16223,16226,16229],{"class":2225,"line":1784},[2223,16224,16225],{"class":2334},"  loadingComponent:",[2223,16227,16228],{"class":2334}," LoadingSpinner",[2223,16230,2347],{"class":2328},[2223,16232,16233,16236,16239],{"class":2225,"line":82},[2223,16234,16235],{"class":2334},"  errorComponent:",[2223,16237,16238],{"class":2334}," ErrorDisplay",[2223,16240,2347],{"class":2328},[2223,16242,16243,16246,16249],{"class":2225,"line":1432},[2223,16244,16245],{"class":2334},"  delay:",[2223,16247,16248],{"class":4463}," 200",[2223,16250,2347],{"class":2328},[2223,16252,16253,16256],{"class":2225,"line":369},[2223,16254,16255],{"class":2334},"  timeout:",[2223,16257,16258],{"class":4463}," 3000\n",[2223,16260,16261],{"class":2225,"line":2425},[2223,16262,11556],{"class":2328},[2223,16264,16265,16267,16269],{"class":2225,"line":1750},[2223,16266,3813],{"class":3510},[2223,16268,3514],{"class":3513},[2223,16270,3530],{"class":3510},[116,16272,16274],{"id":16273},"virtual-scrolling-for-large-lists","Virtual Scrolling for Large Lists",[2214,16276,16278],{"className":3501,"code":16277,"language":3503,"meta":24,"style":24},"\u003Cscript setup lang=\"ts\">\nimport { ref, computed } from 'vue'\n\nconst items = ref(Array.from({ length: 10000 }, (_, i) => `Item ${i}`))\nconst scrollTop = ref(0)\nconst containerHeight = 600\nconst itemHeight = 50\nconst visibleCount = Math.ceil(containerHeight / itemHeight)\nconst bufferCount = 3\n\nconst visibleItems = computed(() => {\n  const startIndex = Math.max(0, Math.floor(scrollTop.value / itemHeight) - bufferCount)\n  const endIndex = Math.min(\n    items.value.length,\n    startIndex + visibleCount + bufferCount * 2\n  )\n  \n  return items.value.slice(startIndex, endIndex).map((item, i) => ({\n    item,\n    index: startIndex + i\n  }))\n})\n\nconst totalHeight = computed(() => items.value.length * itemHeight)\nconst offsetY = computed(() => \n  Math.max(0, Math.floor(scrollTop.value / itemHeight) - bufferCount) * itemHeight\n)\n\nfunction handleScroll(e: Event) {\n  scrollTop.value = (e.target as HTMLElement).scrollTop\n}\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cdiv \n    class=\"virtual-scroll-container\"\n    :style=\"{ height: `${containerHeight}px`, overflow: 'auto' }\"\n    @scroll=\"handleScroll\"\n  >\n    \u003Cdiv :style=\"{ height: `${totalHeight}px`, position: 'relative' }\">\n      \u003Cdiv\n        v-for=\"{ item, index } in visibleItems\"\n        :key=\"index\"\n        :style=\"{\n          position: 'absolute',\n          top: `${index * itemHeight}px`,\n          height: `${itemHeight}px`,\n          width: '100%'\n        }\"\n      >\n        {{ item }}\n      \u003C/div>\n    \u003C/div>\n  \u003C/div>\n\u003C/template>\n",[2220,16279,16280,16296,16314,16318,16375,16392,16404,16416,16444,16456,16460,16477,16528,16546,16561,16579,16583,16587,16633,16640,16652,16657,16661,16665,16696,16713,16760,16764,16768,16786,16815,16819,16827,16831,16839,16847,16857,16897,16913,16918,16961,16968,16994,17008,17020,17030,17051,17069,17077,17084,17089,17097,17105,17113,17121],{"__ignoreMap":24},[2223,16281,16282,16284,16286,16288,16290,16292,16294],{"class":2225,"line":2226},[2223,16283,3113],{"class":3510},[2223,16285,3514],{"class":3513},[2223,16287,3518],{"class":3517},[2223,16289,3521],{"class":3517},[2223,16291,3524],{"class":2328},[2223,16293,3527],{"class":2233},[2223,16295,3530],{"class":3510},[2223,16297,16298,16300,16302,16304,16306,16308,16310,16312],{"class":2225,"line":28},[2223,16299,2871],{"class":2318},[2223,16301,2874],{"class":2328},[2223,16303,10419],{"class":2334},[2223,16305,269],{"class":2328},[2223,16307,10445],{"class":2334},[2223,16309,2880],{"class":2328},[2223,16311,2883],{"class":2318},[2223,16313,11138],{"class":2233},[2223,16315,16316],{"class":2225,"line":25},[2223,16317,2616],{"emptyLinePlaceholder":33},[2223,16319,16320,16322,16325,16327,16329,16331,16334,16336,16338,16340,16343,16346,16349,16352,16354,16357,16359,16361,16364,16366,16368,16370,16372],{"class":2225,"line":2341},[2223,16321,3564],{"class":2900},[2223,16323,16324],{"class":2904}," items",[2223,16326,2909],{"class":2908},[2223,16328,10545],{"class":2229},[2223,16330,3001],{"class":2328},[2223,16332,16333],{"class":2334},"Array",[2223,16335,260],{"class":2328},[2223,16337,2883],{"class":2229},[2223,16339,4400],{"class":2328},[2223,16341,16342],{"class":2334},"length:",[2223,16344,16345],{"class":4463}," 10000",[2223,16347,16348],{"class":2328}," }, (",[2223,16350,16351],{"class":3131},"_",[2223,16353,269],{"class":2328},[2223,16355,16356],{"class":3131},"i",[2223,16358,3350],{"class":2328},[2223,16360,3353],{"class":2900},[2223,16362,16363],{"class":2233}," `Item ",[2223,16365,3367],{"class":3366},[2223,16367,16356],{"class":2334},[2223,16369,3372],{"class":3366},[2223,16371,3654],{"class":2233},[2223,16373,16374],{"class":2328},"))\n",[2223,16376,16377,16379,16382,16384,16386,16388,16390],{"class":2225,"line":336},[2223,16378,3564],{"class":2900},[2223,16380,16381],{"class":2904}," scrollTop",[2223,16383,2909],{"class":2908},[2223,16385,10545],{"class":2229},[2223,16387,3001],{"class":2328},[2223,16389,10550],{"class":4463},[2223,16391,4947],{"class":2328},[2223,16393,16394,16396,16399,16401],{"class":2225,"line":2357},[2223,16395,3564],{"class":2900},[2223,16397,16398],{"class":2904}," containerHeight",[2223,16400,2909],{"class":2908},[2223,16402,16403],{"class":4463}," 600\n",[2223,16405,16406,16408,16411,16413],{"class":2225,"line":2363},[2223,16407,3564],{"class":2900},[2223,16409,16410],{"class":2904}," itemHeight",[2223,16412,2909],{"class":2908},[2223,16414,16415],{"class":4463}," 50\n",[2223,16417,16418,16420,16423,16425,16428,16430,16433,16435,16438,16440,16442],{"class":2225,"line":2074},[2223,16419,3564],{"class":2900},[2223,16421,16422],{"class":2904}," visibleCount",[2223,16424,2909],{"class":2908},[2223,16426,16427],{"class":2334}," Math",[2223,16429,260],{"class":2328},[2223,16431,16432],{"class":2229},"ceil",[2223,16434,3001],{"class":2328},[2223,16436,16437],{"class":2334},"containerHeight",[2223,16439,14099],{"class":2908},[2223,16441,16410],{"class":2334},[2223,16443,4947],{"class":2328},[2223,16445,16446,16448,16451,16453],{"class":2225,"line":43},[2223,16447,3564],{"class":2900},[2223,16449,16450],{"class":2904}," bufferCount",[2223,16452,2909],{"class":2908},[2223,16454,16455],{"class":4463}," 3\n",[2223,16457,16458],{"class":2225,"line":2382},[2223,16459,2616],{"emptyLinePlaceholder":33},[2223,16461,16462,16464,16467,16469,16471,16473,16475],{"class":2225,"line":1784},[2223,16463,3564],{"class":2900},[2223,16465,16466],{"class":2904}," visibleItems",[2223,16468,2909],{"class":2908},[2223,16470,3757],{"class":2229},[2223,16472,3760],{"class":2328},[2223,16474,3353],{"class":2900},[2223,16476,2379],{"class":2328},[2223,16478,16479,16481,16484,16486,16488,16490,16493,16495,16497,16499,16502,16504,16507,16509,16512,16514,16516,16518,16520,16522,16524,16526],{"class":2225,"line":82},[2223,16480,5184],{"class":2900},[2223,16482,16483],{"class":2904}," startIndex",[2223,16485,2909],{"class":2908},[2223,16487,16427],{"class":2334},[2223,16489,260],{"class":2328},[2223,16491,16492],{"class":2229},"max",[2223,16494,3001],{"class":2328},[2223,16496,10550],{"class":4463},[2223,16498,269],{"class":2328},[2223,16500,16501],{"class":2334},"Math",[2223,16503,260],{"class":2328},[2223,16505,16506],{"class":2229},"floor",[2223,16508,3001],{"class":2328},[2223,16510,16511],{"class":2334},"scrollTop",[2223,16513,260],{"class":2328},[2223,16515,3649],{"class":2334},[2223,16517,14099],{"class":2908},[2223,16519,16410],{"class":2334},[2223,16521,3350],{"class":2328},[2223,16523,5253],{"class":2908},[2223,16525,16450],{"class":2334},[2223,16527,4947],{"class":2328},[2223,16529,16530,16532,16535,16537,16539,16541,16544],{"class":2225,"line":1432},[2223,16531,5184],{"class":2900},[2223,16533,16534],{"class":2904}," endIndex",[2223,16536,2909],{"class":2908},[2223,16538,16427],{"class":2334},[2223,16540,260],{"class":2328},[2223,16542,16543],{"class":2229},"min",[2223,16545,6160],{"class":2328},[2223,16547,16548,16551,16553,16555,16557,16559],{"class":2225,"line":369},[2223,16549,16550],{"class":2334},"    items",[2223,16552,260],{"class":2328},[2223,16554,3649],{"class":2334},[2223,16556,260],{"class":2328},[2223,16558,15036],{"class":6878},[2223,16560,2347],{"class":2328},[2223,16562,16563,16566,16568,16570,16572,16574,16576],{"class":2225,"line":2425},[2223,16564,16565],{"class":2334},"    startIndex",[2223,16567,12985],{"class":2908},[2223,16569,16422],{"class":2334},[2223,16571,12985],{"class":2908},[2223,16573,16450],{"class":2334},[2223,16575,10615],{"class":2908},[2223,16577,16578],{"class":4463}," 2\n",[2223,16580,16581],{"class":2225,"line":1750},[2223,16582,15099],{"class":2328},[2223,16584,16585],{"class":2225,"line":2105},[2223,16586,2371],{"class":2328},[2223,16588,16589,16591,16593,16595,16597,16599,16602,16604,16607,16609,16612,16614,16617,16620,16623,16625,16627,16629,16631],{"class":2225,"line":2449},[2223,16590,3360],{"class":2318},[2223,16592,16324],{"class":2334},[2223,16594,260],{"class":2328},[2223,16596,3649],{"class":2334},[2223,16598,260],{"class":2328},[2223,16600,16601],{"class":2229},"slice",[2223,16603,3001],{"class":2328},[2223,16605,16606],{"class":2334},"startIndex",[2223,16608,269],{"class":2328},[2223,16610,16611],{"class":2334},"endIndex",[2223,16613,3707],{"class":2328},[2223,16615,16616],{"class":2229},"map",[2223,16618,16619],{"class":2328},"((",[2223,16621,16622],{"class":3131},"item",[2223,16624,269],{"class":2328},[2223,16626,16356],{"class":3131},[2223,16628,3350],{"class":2328},[2223,16630,3353],{"class":2900},[2223,16632,5651],{"class":2328},[2223,16634,16635,16638],{"class":2225,"line":2454},[2223,16636,16637],{"class":2334},"    item",[2223,16639,2347],{"class":2328},[2223,16641,16642,16645,16647,16649],{"class":2225,"line":1839},[2223,16643,16644],{"class":2334},"    index:",[2223,16646,16483],{"class":2334},[2223,16648,12985],{"class":2908},[2223,16650,16651],{"class":2334}," i\n",[2223,16653,16654],{"class":2225,"line":2473},[2223,16655,16656],{"class":2328},"  }))\n",[2223,16658,16659],{"class":2225,"line":2483},[2223,16660,11556],{"class":2328},[2223,16662,16663],{"class":2225,"line":2493},[2223,16664,2616],{"emptyLinePlaceholder":33},[2223,16666,16667,16669,16672,16674,16676,16678,16680,16682,16684,16686,16688,16690,16692,16694],{"class":2225,"line":2504},[2223,16668,3564],{"class":2900},[2223,16670,16671],{"class":2904}," totalHeight",[2223,16673,2909],{"class":2908},[2223,16675,3757],{"class":2229},[2223,16677,3760],{"class":2328},[2223,16679,3353],{"class":2900},[2223,16681,16324],{"class":2334},[2223,16683,260],{"class":2328},[2223,16685,3649],{"class":2334},[2223,16687,260],{"class":2328},[2223,16689,15036],{"class":6878},[2223,16691,10615],{"class":2908},[2223,16693,16410],{"class":2334},[2223,16695,4947],{"class":2328},[2223,16697,16698,16700,16703,16705,16707,16709,16711],{"class":2225,"line":2510},[2223,16699,3564],{"class":2900},[2223,16701,16702],{"class":2904}," offsetY",[2223,16704,2909],{"class":2908},[2223,16706,3757],{"class":2229},[2223,16708,3760],{"class":2328},[2223,16710,3353],{"class":2900},[2223,16712,3765],{"class":2328},[2223,16714,16715,16718,16720,16722,16724,16726,16728,16730,16732,16734,16736,16738,16740,16742,16744,16746,16748,16750,16752,16754,16757],{"class":2225,"line":2516},[2223,16716,16717],{"class":2334},"  Math",[2223,16719,260],{"class":2328},[2223,16721,16492],{"class":2229},[2223,16723,3001],{"class":2328},[2223,16725,10550],{"class":4463},[2223,16727,269],{"class":2328},[2223,16729,16501],{"class":2334},[2223,16731,260],{"class":2328},[2223,16733,16506],{"class":2229},[2223,16735,3001],{"class":2328},[2223,16737,16511],{"class":2334},[2223,16739,260],{"class":2328},[2223,16741,3649],{"class":2334},[2223,16743,14099],{"class":2908},[2223,16745,16410],{"class":2334},[2223,16747,3350],{"class":2328},[2223,16749,5253],{"class":2908},[2223,16751,16450],{"class":2334},[2223,16753,3350],{"class":2328},[2223,16755,16756],{"class":2908},"*",[2223,16758,16759],{"class":2334}," itemHeight\n",[2223,16761,16762],{"class":2225,"line":2526},[2223,16763,4947],{"class":2328},[2223,16765,16766],{"class":2225,"line":2540},[2223,16767,2616],{"emptyLinePlaceholder":33},[2223,16769,16770,16772,16775,16777,16779,16781,16784],{"class":2225,"line":2552},[2223,16771,10753],{"class":2900},[2223,16773,16774],{"class":2229}," handleScroll",[2223,16776,3001],{"class":2328},[2223,16778,12837],{"class":3131},[2223,16780,2300],{"class":2908},[2223,16782,16783],{"class":3100}," Event",[2223,16785,4444],{"class":2328},[2223,16787,16788,16791,16793,16795,16797,16799,16801,16803,16805,16807,16810,16812],{"class":2225,"line":2563},[2223,16789,16790],{"class":2334},"  scrollTop",[2223,16792,260],{"class":2328},[2223,16794,3649],{"class":2334},[2223,16796,2909],{"class":2908},[2223,16798,3340],{"class":2328},[2223,16800,12837],{"class":2334},[2223,16802,260],{"class":2328},[2223,16804,15737],{"class":2334},[2223,16806,4891],{"class":2318},[2223,16808,16809],{"class":3100}," HTMLElement",[2223,16811,3707],{"class":2328},[2223,16813,16814],{"class":2334},"scrollTop\n",[2223,16816,16817],{"class":2225,"line":2571},[2223,16818,4487],{"class":2328},[2223,16820,16821,16823,16825],{"class":2225,"line":2581},[2223,16822,3813],{"class":3510},[2223,16824,3514],{"class":3513},[2223,16826,3530],{"class":3510},[2223,16828,16829],{"class":2225,"line":2592},[2223,16830,2616],{"emptyLinePlaceholder":33},[2223,16832,16833,16835,16837],{"class":2225,"line":2601},[2223,16834,3113],{"class":3510},[2223,16836,3828],{"class":3513},[2223,16838,3530],{"class":3510},[2223,16840,16841,16843,16845],{"class":2225,"line":2607},[2223,16842,3835],{"class":3510},[2223,16844,3917],{"class":3513},[2223,16846,3765],{"class":2328},[2223,16848,16849,16852,16854],{"class":2225,"line":2613},[2223,16850,16851],{"class":3517},"    class",[2223,16853,3524],{"class":2328},[2223,16855,16856],{"class":2233},"\"virtual-scroll-container\"\n",[2223,16858,16859,16862,16864,16866,16868,16870,16873,16875,16877,16879,16881,16884,16886,16889,16892,16895],{"class":2225,"line":2619},[2223,16860,16861],{"class":2328},"    :",[2223,16863,6642],{"class":3517},[2223,16865,3524],{"class":2328},[2223,16867,3944],{"class":3646},[2223,16869,6419],{"class":2328},[2223,16871,16872],{"class":2334},"height:",[2223,16874,3363],{"class":2233},[2223,16876,3367],{"class":3366},[2223,16878,16437],{"class":2334},[2223,16880,3372],{"class":3366},[2223,16882,16883],{"class":2233},"px`",[2223,16885,269],{"class":2328},[2223,16887,16888],{"class":2334},"overflow:",[2223,16890,16891],{"class":2233}," 'auto'",[2223,16893,16894],{"class":2328}," }",[2223,16896,3954],{"class":3646},[2223,16898,16899,16901,16904,16906,16908,16911],{"class":2225,"line":2627},[2223,16900,5950],{"class":2328},[2223,16902,16903],{"class":3517},"scroll",[2223,16905,3524],{"class":2328},[2223,16907,3944],{"class":3646},[2223,16909,16910],{"class":2334},"handleScroll",[2223,16912,3954],{"class":3646},[2223,16914,16915],{"class":2225,"line":2635},[2223,16916,16917],{"class":3510},"  >\n",[2223,16919,16920,16922,16924,16926,16928,16930,16932,16934,16936,16938,16940,16943,16945,16947,16949,16952,16955,16957,16959],{"class":2225,"line":2644},[2223,16921,3845],{"class":3510},[2223,16923,3917],{"class":3513},[2223,16925,4762],{"class":2328},[2223,16927,6642],{"class":3517},[2223,16929,3524],{"class":2328},[2223,16931,3944],{"class":3646},[2223,16933,6419],{"class":2328},[2223,16935,16872],{"class":2334},[2223,16937,3363],{"class":2233},[2223,16939,3367],{"class":3366},[2223,16941,16942],{"class":2334},"totalHeight",[2223,16944,3372],{"class":3366},[2223,16946,16883],{"class":2233},[2223,16948,269],{"class":2328},[2223,16950,16951],{"class":2334},"position:",[2223,16953,16954],{"class":2233}," 'relative'",[2223,16956,16894],{"class":2328},[2223,16958,3944],{"class":3646},[2223,16960,3530],{"class":3510},[2223,16962,16963,16965],{"class":2225,"line":2649},[2223,16964,3863],{"class":3510},[2223,16966,16967],{"class":3513},"div\n",[2223,16969,16970,16973,16975,16977,16979,16981,16983,16986,16988,16990,16992],{"class":2225,"line":2655},[2223,16971,16972],{"class":2318},"        v-for",[2223,16974,3524],{"class":2328},[2223,16976,3944],{"class":3646},[2223,16978,6419],{"class":2328},[2223,16980,16622],{"class":2334},[2223,16982,269],{"class":2328},[2223,16984,16985],{"class":2334},"index",[2223,16987,2880],{"class":2328},[2223,16989,7386],{"class":2900},[2223,16991,16466],{"class":2334},[2223,16993,3954],{"class":3646},[2223,16995,16996,16998,17000,17002,17004,17006],{"class":2225,"line":3384},[2223,16997,15694],{"class":2328},[2223,16999,3962],{"class":3517},[2223,17001,3524],{"class":2328},[2223,17003,3944],{"class":3646},[2223,17005,16985],{"class":2334},[2223,17007,3954],{"class":3646},[2223,17009,17010,17012,17014,17016,17018],{"class":2225,"line":3389},[2223,17011,15694],{"class":2328},[2223,17013,6642],{"class":3517},[2223,17015,3524],{"class":2328},[2223,17017,3944],{"class":3646},[2223,17019,8411],{"class":2328},[2223,17021,17022,17025,17028],{"class":2225,"line":3415},[2223,17023,17024],{"class":2334},"          position:",[2223,17026,17027],{"class":2233}," 'absolute'",[2223,17029,2347],{"class":2328},[2223,17031,17032,17035,17037,17039,17041,17043,17045,17047,17049],{"class":2225,"line":3433},[2223,17033,17034],{"class":2334},"          top:",[2223,17036,3363],{"class":2233},[2223,17038,3367],{"class":3366},[2223,17040,16985],{"class":2334},[2223,17042,10615],{"class":2908},[2223,17044,16410],{"class":2334},[2223,17046,3372],{"class":3366},[2223,17048,16883],{"class":2233},[2223,17050,2347],{"class":2328},[2223,17052,17053,17056,17058,17060,17063,17065,17067],{"class":2225,"line":3438},[2223,17054,17055],{"class":2334},"          height:",[2223,17057,3363],{"class":2233},[2223,17059,3367],{"class":3366},[2223,17061,17062],{"class":2334},"itemHeight",[2223,17064,3372],{"class":3366},[2223,17066,16883],{"class":2233},[2223,17068,2347],{"class":2328},[2223,17070,17071,17074],{"class":2225,"line":3443},[2223,17072,17073],{"class":2334},"          width:",[2223,17075,17076],{"class":2233}," '100%'\n",[2223,17078,17079,17082],{"class":2225,"line":3469},[2223,17080,17081],{"class":2328},"        }",[2223,17083,3954],{"class":3646},[2223,17085,17086],{"class":2225,"line":3487},[2223,17087,17088],{"class":3510},"      >\n",[2223,17090,17091,17093,17095],{"class":2225,"line":4215},[2223,17092,3880],{"class":2328},[2223,17094,16622],{"class":2334},[2223,17096,5082],{"class":2328},[2223,17098,17099,17101,17103],{"class":2225,"line":14875},[2223,17100,3896],{"class":3510},[2223,17102,3917],{"class":3513},[2223,17104,3530],{"class":3510},[2223,17106,17107,17109,17111],{"class":2225,"line":14880},[2223,17108,4199],{"class":3510},[2223,17110,3917],{"class":3513},[2223,17112,3530],{"class":3510},[2223,17114,17115,17117,17119],{"class":2225,"line":14885},[2223,17116,4208],{"class":3510},[2223,17118,3917],{"class":3513},[2223,17120,3530],{"class":3510},[2223,17122,17123,17125,17127],{"class":2225,"line":14894},[2223,17124,3813],{"class":3510},[2223,17126,3828],{"class":3513},[2223,17128,3530],{"class":3510},[116,17130,17132],{"id":17131},"computed-property-optimization","Computed Property Optimization",[2214,17134,17136],{"className":3501,"code":17135,"language":3503,"meta":24,"style":24},"\u003Cscript setup lang=\"ts\">\nimport { ref, computed, shallowRef } from 'vue'\n\n// Use shallowRef for large objects you won't mutate deeply\nconst largeDataset = shallowRef\u003CDataPoint[]>([])\n\n// Memoize expensive computations\nconst processedData = computed(() => {\n  // This only re-runs when largeDataset reference changes\n  return largeDataset.value.map(point => ({\n    ...point,\n    processed: expensiveCalculation(point)\n  }))\n})\n\n// Use separate computed properties instead of one complex one\nconst filteredData = computed(() => \n  processedData.value.filter(item => item.active)\n)\n\nconst sortedData = computed(() => \n  [...filteredData.value].sort((a, b) => a.value - b.value)\n)\n\u003C/script>\n",[2220,17137,17138,17154,17177,17181,17186,17206,17210,17215,17232,17237,17260,17269,17283,17287,17291,17295,17300,17317,17346,17350,17354,17371,17423,17427],{"__ignoreMap":24},[2223,17139,17140,17142,17144,17146,17148,17150,17152],{"class":2225,"line":2226},[2223,17141,3113],{"class":3510},[2223,17143,3514],{"class":3513},[2223,17145,3518],{"class":3517},[2223,17147,3521],{"class":3517},[2223,17149,3524],{"class":2328},[2223,17151,3527],{"class":2233},[2223,17153,3530],{"class":3510},[2223,17155,17156,17158,17160,17162,17164,17166,17168,17171,17173,17175],{"class":2225,"line":28},[2223,17157,2871],{"class":2318},[2223,17159,2874],{"class":2328},[2223,17161,10419],{"class":2334},[2223,17163,269],{"class":2328},[2223,17165,10445],{"class":2334},[2223,17167,269],{"class":2328},[2223,17169,17170],{"class":2334},"shallowRef",[2223,17172,2880],{"class":2328},[2223,17174,2883],{"class":2318},[2223,17176,11138],{"class":2233},[2223,17178,17179],{"class":2225,"line":25},[2223,17180,2616],{"emptyLinePlaceholder":33},[2223,17182,17183],{"class":2225,"line":2341},[2223,17184,17185],{"class":2312},"// Use shallowRef for large objects you won't mutate deeply\n",[2223,17187,17188,17190,17193,17195,17198,17200,17203],{"class":2225,"line":336},[2223,17189,3564],{"class":2900},[2223,17191,17192],{"class":2904}," largeDataset",[2223,17194,2909],{"class":2908},[2223,17196,17197],{"class":2229}," shallowRef",[2223,17199,3113],{"class":2328},[2223,17201,17202],{"class":3100},"DataPoint",[2223,17204,17205],{"class":2328},"[]>([])\n",[2223,17207,17208],{"class":2225,"line":2357},[2223,17209,2616],{"emptyLinePlaceholder":33},[2223,17211,17212],{"class":2225,"line":2363},[2223,17213,17214],{"class":2312},"// Memoize expensive computations\n",[2223,17216,17217,17219,17222,17224,17226,17228,17230],{"class":2225,"line":2074},[2223,17218,3564],{"class":2900},[2223,17220,17221],{"class":2904}," processedData",[2223,17223,2909],{"class":2908},[2223,17225,3757],{"class":2229},[2223,17227,3760],{"class":2328},[2223,17229,3353],{"class":2900},[2223,17231,2379],{"class":2328},[2223,17233,17234],{"class":2225,"line":43},[2223,17235,17236],{"class":2312},"  // This only re-runs when largeDataset reference changes\n",[2223,17238,17239,17241,17243,17245,17247,17249,17251,17253,17256,17258],{"class":2225,"line":2382},[2223,17240,3360],{"class":2318},[2223,17242,17192],{"class":2334},[2223,17244,260],{"class":2328},[2223,17246,3649],{"class":2334},[2223,17248,260],{"class":2328},[2223,17250,16616],{"class":2229},[2223,17252,3001],{"class":2328},[2223,17254,17255],{"class":3131},"point",[2223,17257,3788],{"class":2900},[2223,17259,5651],{"class":2328},[2223,17261,17262,17265,17267],{"class":2225,"line":1784},[2223,17263,17264],{"class":2908},"    ...",[2223,17266,17255],{"class":2334},[2223,17268,2347],{"class":2328},[2223,17270,17271,17274,17277,17279,17281],{"class":2225,"line":82},[2223,17272,17273],{"class":2334},"    processed:",[2223,17275,17276],{"class":2229}," expensiveCalculation",[2223,17278,3001],{"class":2328},[2223,17280,17255],{"class":2334},[2223,17282,4947],{"class":2328},[2223,17284,17285],{"class":2225,"line":1432},[2223,17286,16656],{"class":2328},[2223,17288,17289],{"class":2225,"line":369},[2223,17290,11556],{"class":2328},[2223,17292,17293],{"class":2225,"line":2425},[2223,17294,2616],{"emptyLinePlaceholder":33},[2223,17296,17297],{"class":2225,"line":1750},[2223,17298,17299],{"class":2312},"// Use separate computed properties instead of one complex one\n",[2223,17301,17302,17304,17307,17309,17311,17313,17315],{"class":2225,"line":2105},[2223,17303,3564],{"class":2900},[2223,17305,17306],{"class":2904}," filteredData",[2223,17308,2909],{"class":2908},[2223,17310,3757],{"class":2229},[2223,17312,3760],{"class":2328},[2223,17314,3353],{"class":2900},[2223,17316,3765],{"class":2328},[2223,17318,17319,17322,17324,17326,17328,17330,17332,17334,17336,17339,17341,17344],{"class":2225,"line":2449},[2223,17320,17321],{"class":2334},"  processedData",[2223,17323,260],{"class":2328},[2223,17325,3649],{"class":2334},[2223,17327,260],{"class":2328},[2223,17329,3780],{"class":2229},[2223,17331,3001],{"class":2328},[2223,17333,16622],{"class":3131},[2223,17335,3788],{"class":2900},[2223,17337,17338],{"class":2334}," item",[2223,17340,260],{"class":2328},[2223,17342,17343],{"class":2334},"active",[2223,17345,4947],{"class":2328},[2223,17347,17348],{"class":2225,"line":2454},[2223,17349,4947],{"class":2328},[2223,17351,17352],{"class":2225,"line":1839},[2223,17353,2616],{"emptyLinePlaceholder":33},[2223,17355,17356,17358,17361,17363,17365,17367,17369],{"class":2225,"line":2473},[2223,17357,3564],{"class":2900},[2223,17359,17360],{"class":2904}," sortedData",[2223,17362,2909],{"class":2908},[2223,17364,3757],{"class":2229},[2223,17366,3760],{"class":2328},[2223,17368,3353],{"class":2900},[2223,17370,3765],{"class":2328},[2223,17372,17373,17376,17378,17381,17383,17385,17388,17391,17393,17395,17397,17400,17402,17404,17407,17409,17411,17414,17417,17419,17421],{"class":2225,"line":2483},[2223,17374,17375],{"class":2328},"  [",[2223,17377,5727],{"class":2908},[2223,17379,17380],{"class":2334},"filteredData",[2223,17382,260],{"class":2328},[2223,17384,3649],{"class":2334},[2223,17386,17387],{"class":2328},"].",[2223,17389,17390],{"class":2229},"sort",[2223,17392,16619],{"class":2328},[2223,17394,173],{"class":3131},[2223,17396,269],{"class":2328},[2223,17398,17399],{"class":3131},"b",[2223,17401,3350],{"class":2328},[2223,17403,3353],{"class":2900},[2223,17405,17406],{"class":2334}," a",[2223,17408,260],{"class":2328},[2223,17410,3649],{"class":2334},[2223,17412,17413],{"class":2908}," -",[2223,17415,17416],{"class":2334}," b",[2223,17418,260],{"class":2328},[2223,17420,3649],{"class":2334},[2223,17422,4947],{"class":2328},[2223,17424,17425],{"class":2225,"line":2493},[2223,17426,4947],{"class":2328},[2223,17428,17429,17431,17433],{"class":2225,"line":2504},[2223,17430,3813],{"class":3510},[2223,17432,3514],{"class":3513},[2223,17434,3530],{"class":3510},[16,17436,17438],{"id":17437},"_10-testing-patterns","10. Testing Patterns",[116,17440,17442],{"id":17441},"testing-composables","Testing Composables",[2214,17444,17446],{"className":2303,"code":17445,"language":2305,"meta":24,"style":24},"// composables/__tests__/useCounter.spec.ts\nimport { describe, it, expect } from 'vitest'\nimport { useCounter } from '../useCounter'\n\ndescribe('useCounter', () => {\n  it('initializes with default value', () => {\n    const { count } = useCounter()\n    expect(count.value).toBe(0)\n  })\n  \n  it('initializes with custom value', () => {\n    const { count } = useCounter(10)\n    expect(count.value).toBe(10)\n  })\n  \n  it('increments count', () => {\n    const { count, increment } = useCounter(0)\n    increment()\n    expect(count.value).toBe(1)\n  })\n  \n  it('computes double correctly', () => {\n    const { count, double, increment } = useCounter(5)\n    expect(double.value).toBe(10)\n    increment()\n    expect(double.value).toBe(12)\n  })\n})\n",[2220,17447,17448,17453,17479,17494,17498,17513,17529,17545,17569,17574,17578,17593,17613,17635,17639,17643,17658,17682,17689,17712,17716,17720,17735,17764,17786,17792,17814,17818],{"__ignoreMap":24},[2223,17449,17450],{"class":2225,"line":2226},[2223,17451,17452],{"class":2312},"// composables/__tests__/useCounter.spec.ts\n",[2223,17454,17455,17457,17459,17462,17464,17467,17469,17472,17474,17476],{"class":2225,"line":28},[2223,17456,2871],{"class":2318},[2223,17458,2874],{"class":2328},[2223,17460,17461],{"class":2334},"describe",[2223,17463,269],{"class":2328},[2223,17465,17466],{"class":2334},"it",[2223,17468,269],{"class":2328},[2223,17470,17471],{"class":2334},"expect",[2223,17473,2880],{"class":2328},[2223,17475,2883],{"class":2318},[2223,17477,17478],{"class":2233}," 'vitest'\n",[2223,17480,17481,17483,17485,17487,17489,17491],{"class":2225,"line":25},[2223,17482,2871],{"class":2318},[2223,17484,2874],{"class":2328},[2223,17486,11032],{"class":2334},[2223,17488,2880],{"class":2328},[2223,17490,2883],{"class":2318},[2223,17492,17493],{"class":2233}," '../useCounter'\n",[2223,17495,17496],{"class":2225,"line":2341},[2223,17497,2616],{"emptyLinePlaceholder":33},[2223,17499,17500,17502,17504,17507,17509,17511],{"class":2225,"line":336},[2223,17501,17461],{"class":2229},[2223,17503,3001],{"class":2328},[2223,17505,17506],{"class":2233},"'useCounter'",[2223,17508,4378],{"class":2328},[2223,17510,3353],{"class":2900},[2223,17512,2379],{"class":2328},[2223,17514,17515,17518,17520,17523,17525,17527],{"class":2225,"line":2357},[2223,17516,17517],{"class":2229},"  it",[2223,17519,3001],{"class":2328},[2223,17521,17522],{"class":2233},"'initializes with default value'",[2223,17524,4378],{"class":2328},[2223,17526,3353],{"class":2900},[2223,17528,2379],{"class":2328},[2223,17530,17531,17533,17535,17537,17539,17541,17543],{"class":2225,"line":2363},[2223,17532,3673],{"class":2900},[2223,17534,2874],{"class":2328},[2223,17536,10638],{"class":2904},[2223,17538,2880],{"class":2328},[2223,17540,3524],{"class":2908},[2223,17542,10862],{"class":2229},[2223,17544,4389],{"class":2328},[2223,17546,17547,17550,17552,17554,17556,17558,17560,17563,17565,17567],{"class":2225,"line":2074},[2223,17548,17549],{"class":2229},"    expect",[2223,17551,3001],{"class":2328},[2223,17553,10638],{"class":2334},[2223,17555,260],{"class":2328},[2223,17557,3649],{"class":2334},[2223,17559,3707],{"class":2328},[2223,17561,17562],{"class":2229},"toBe",[2223,17564,3001],{"class":2328},[2223,17566,10550],{"class":4463},[2223,17568,4947],{"class":2328},[2223,17570,17571],{"class":2225,"line":43},[2223,17572,17573],{"class":2328},"  })\n",[2223,17575,17576],{"class":2225,"line":2382},[2223,17577,2371],{"class":2328},[2223,17579,17580,17582,17584,17587,17589,17591],{"class":2225,"line":1784},[2223,17581,17517],{"class":2229},[2223,17583,3001],{"class":2328},[2223,17585,17586],{"class":2233},"'initializes with custom value'",[2223,17588,4378],{"class":2328},[2223,17590,3353],{"class":2900},[2223,17592,2379],{"class":2328},[2223,17594,17595,17597,17599,17601,17603,17605,17607,17609,17611],{"class":2225,"line":82},[2223,17596,3673],{"class":2900},[2223,17598,2874],{"class":2328},[2223,17600,10638],{"class":2904},[2223,17602,2880],{"class":2328},[2223,17604,3524],{"class":2908},[2223,17606,10862],{"class":2229},[2223,17608,3001],{"class":2328},[2223,17610,11072],{"class":4463},[2223,17612,4947],{"class":2328},[2223,17614,17615,17617,17619,17621,17623,17625,17627,17629,17631,17633],{"class":2225,"line":1432},[2223,17616,17549],{"class":2229},[2223,17618,3001],{"class":2328},[2223,17620,10638],{"class":2334},[2223,17622,260],{"class":2328},[2223,17624,3649],{"class":2334},[2223,17626,3707],{"class":2328},[2223,17628,17562],{"class":2229},[2223,17630,3001],{"class":2328},[2223,17632,11072],{"class":4463},[2223,17634,4947],{"class":2328},[2223,17636,17637],{"class":2225,"line":369},[2223,17638,17573],{"class":2328},[2223,17640,17641],{"class":2225,"line":2425},[2223,17642,2371],{"class":2328},[2223,17644,17645,17647,17649,17652,17654,17656],{"class":2225,"line":1750},[2223,17646,17517],{"class":2229},[2223,17648,3001],{"class":2328},[2223,17650,17651],{"class":2233},"'increments count'",[2223,17653,4378],{"class":2328},[2223,17655,3353],{"class":2900},[2223,17657,2379],{"class":2328},[2223,17659,17660,17662,17664,17666,17668,17670,17672,17674,17676,17678,17680],{"class":2225,"line":2105},[2223,17661,3673],{"class":2900},[2223,17663,2874],{"class":2328},[2223,17665,10638],{"class":2904},[2223,17667,269],{"class":2328},[2223,17669,10980],{"class":2904},[2223,17671,2880],{"class":2328},[2223,17673,3524],{"class":2908},[2223,17675,10862],{"class":2229},[2223,17677,3001],{"class":2328},[2223,17679,10550],{"class":4463},[2223,17681,4947],{"class":2328},[2223,17683,17684,17687],{"class":2225,"line":2449},[2223,17685,17686],{"class":2229},"    increment",[2223,17688,4389],{"class":2328},[2223,17690,17691,17693,17695,17697,17699,17701,17703,17705,17707,17710],{"class":2225,"line":2454},[2223,17692,17549],{"class":2229},[2223,17694,3001],{"class":2328},[2223,17696,10638],{"class":2334},[2223,17698,260],{"class":2328},[2223,17700,3649],{"class":2334},[2223,17702,3707],{"class":2328},[2223,17704,17562],{"class":2229},[2223,17706,3001],{"class":2328},[2223,17708,17709],{"class":4463},"1",[2223,17711,4947],{"class":2328},[2223,17713,17714],{"class":2225,"line":1839},[2223,17715,17573],{"class":2328},[2223,17717,17718],{"class":2225,"line":2473},[2223,17719,2371],{"class":2328},[2223,17721,17722,17724,17726,17729,17731,17733],{"class":2225,"line":2483},[2223,17723,17517],{"class":2229},[2223,17725,3001],{"class":2328},[2223,17727,17728],{"class":2233},"'computes double correctly'",[2223,17730,4378],{"class":2328},[2223,17732,3353],{"class":2900},[2223,17734,2379],{"class":2328},[2223,17736,17737,17739,17741,17743,17745,17747,17749,17751,17753,17755,17757,17759,17762],{"class":2225,"line":2493},[2223,17738,3673],{"class":2900},[2223,17740,2874],{"class":2328},[2223,17742,10638],{"class":2904},[2223,17744,269],{"class":2328},[2223,17746,10990],{"class":2904},[2223,17748,269],{"class":2328},[2223,17750,10980],{"class":2904},[2223,17752,2880],{"class":2328},[2223,17754,3524],{"class":2908},[2223,17756,10862],{"class":2229},[2223,17758,3001],{"class":2328},[2223,17760,17761],{"class":4463},"5",[2223,17763,4947],{"class":2328},[2223,17765,17766,17768,17770,17772,17774,17776,17778,17780,17782,17784],{"class":2225,"line":2504},[2223,17767,17549],{"class":2229},[2223,17769,3001],{"class":2328},[2223,17771,10990],{"class":2334},[2223,17773,260],{"class":2328},[2223,17775,3649],{"class":2334},[2223,17777,3707],{"class":2328},[2223,17779,17562],{"class":2229},[2223,17781,3001],{"class":2328},[2223,17783,11072],{"class":4463},[2223,17785,4947],{"class":2328},[2223,17787,17788,17790],{"class":2225,"line":2510},[2223,17789,17686],{"class":2229},[2223,17791,4389],{"class":2328},[2223,17793,17794,17796,17798,17800,17802,17804,17806,17808,17810,17812],{"class":2225,"line":2516},[2223,17795,17549],{"class":2229},[2223,17797,3001],{"class":2328},[2223,17799,10990],{"class":2334},[2223,17801,260],{"class":2328},[2223,17803,3649],{"class":2334},[2223,17805,3707],{"class":2328},[2223,17807,17562],{"class":2229},[2223,17809,3001],{"class":2328},[2223,17811,6919],{"class":4463},[2223,17813,4947],{"class":2328},[2223,17815,17816],{"class":2225,"line":2526},[2223,17817,17573],{"class":2328},[2223,17819,17820],{"class":2225,"line":2540},[2223,17821,11556],{"class":2328},[116,17823,17825],{"id":17824},"testing-components","Testing Components",[2214,17827,17829],{"className":2303,"code":17828,"language":2305,"meta":24,"style":24},"// components/__tests__/UserCard.spec.ts\nimport { describe, it, expect } from 'vitest'\nimport { mount } from '@vue/test-utils'\nimport UserCard from '../UserCard.vue'\n\ndescribe('UserCard', () => {\n  it('renders user name', () => {\n    const wrapper = mount(UserCard, {\n      props: {\n        user: {\n          name: 'John Doe',\n          email: 'john@example.com'\n        }\n      }\n    })\n    \n    expect(wrapper.text()).toContain('John Doe')\n  })\n  \n  it('emits delete event when button clicked', async () => {\n    const wrapper = mount(UserCard, {\n      props: {\n        user: { name: 'John', email: 'john@example.com' }\n      }\n    })\n    \n    await wrapper.find('button.delete').trigger('click')\n    expect(wrapper.emitted('delete')).toBeTruthy()\n  })\n})\n",[2220,17830,17831,17836,17858,17874,17887,17891,17906,17921,17941,17948,17955,17965,17973,17978,17982,17987,17991,18016,18020,18024,18043,18059,18065,18086,18090,18094,18098,18126,18152,18156],{"__ignoreMap":24},[2223,17832,17833],{"class":2225,"line":2226},[2223,17834,17835],{"class":2312},"// components/__tests__/UserCard.spec.ts\n",[2223,17837,17838,17840,17842,17844,17846,17848,17850,17852,17854,17856],{"class":2225,"line":28},[2223,17839,2871],{"class":2318},[2223,17841,2874],{"class":2328},[2223,17843,17461],{"class":2334},[2223,17845,269],{"class":2328},[2223,17847,17466],{"class":2334},[2223,17849,269],{"class":2328},[2223,17851,17471],{"class":2334},[2223,17853,2880],{"class":2328},[2223,17855,2883],{"class":2318},[2223,17857,17478],{"class":2233},[2223,17859,17860,17862,17864,17867,17869,17871],{"class":2225,"line":25},[2223,17861,2871],{"class":2318},[2223,17863,2874],{"class":2328},[2223,17865,17866],{"class":2334},"mount",[2223,17868,2880],{"class":2328},[2223,17870,2883],{"class":2318},[2223,17872,17873],{"class":2233}," '@vue/test-utils'\n",[2223,17875,17876,17878,17881,17884],{"class":2225,"line":2341},[2223,17877,2871],{"class":2318},[2223,17879,17880],{"class":2334}," UserCard",[2223,17882,17883],{"class":2318}," from",[2223,17885,17886],{"class":2233}," '../UserCard.vue'\n",[2223,17888,17889],{"class":2225,"line":336},[2223,17890,2616],{"emptyLinePlaceholder":33},[2223,17892,17893,17895,17897,17900,17902,17904],{"class":2225,"line":2357},[2223,17894,17461],{"class":2229},[2223,17896,3001],{"class":2328},[2223,17898,17899],{"class":2233},"'UserCard'",[2223,17901,4378],{"class":2328},[2223,17903,3353],{"class":2900},[2223,17905,2379],{"class":2328},[2223,17907,17908,17910,17912,17915,17917,17919],{"class":2225,"line":2363},[2223,17909,17517],{"class":2229},[2223,17911,3001],{"class":2328},[2223,17913,17914],{"class":2233},"'renders user name'",[2223,17916,4378],{"class":2328},[2223,17918,3353],{"class":2900},[2223,17920,2379],{"class":2328},[2223,17922,17923,17925,17928,17930,17933,17935,17938],{"class":2225,"line":2074},[2223,17924,3673],{"class":2900},[2223,17926,17927],{"class":2904}," wrapper",[2223,17929,2909],{"class":2908},[2223,17931,17932],{"class":2229}," mount",[2223,17934,3001],{"class":2328},[2223,17936,17937],{"class":2334},"UserCard",[2223,17939,17940],{"class":2328},", {\n",[2223,17942,17943,17946],{"class":2225,"line":43},[2223,17944,17945],{"class":2334},"      props:",[2223,17947,2379],{"class":2328},[2223,17949,17950,17953],{"class":2225,"line":2382},[2223,17951,17952],{"class":2334},"        user:",[2223,17954,2379],{"class":2328},[2223,17956,17957,17960,17963],{"class":2225,"line":1784},[2223,17958,17959],{"class":2334},"          name:",[2223,17961,17962],{"class":2233}," 'John Doe'",[2223,17964,2347],{"class":2328},[2223,17966,17967,17970],{"class":2225,"line":82},[2223,17968,17969],{"class":2334},"          email:",[2223,17971,17972],{"class":2233}," 'john@example.com'\n",[2223,17974,17975],{"class":2225,"line":1432},[2223,17976,17977],{"class":2328},"        }\n",[2223,17979,17980],{"class":2225,"line":369},[2223,17981,2507],{"class":2328},[2223,17983,17984],{"class":2225,"line":2425},[2223,17985,17986],{"class":2328},"    })\n",[2223,17988,17989],{"class":2225,"line":1750},[2223,17990,4752],{"class":2328},[2223,17992,17993,17995,17997,18000,18002,18004,18006,18009,18011,18014],{"class":2225,"line":2105},[2223,17994,17549],{"class":2229},[2223,17996,3001],{"class":2328},[2223,17998,17999],{"class":2334},"wrapper",[2223,18001,260],{"class":2328},[2223,18003,2671],{"class":2229},[2223,18005,3010],{"class":2328},[2223,18007,18008],{"class":2229},"toContain",[2223,18010,3001],{"class":2328},[2223,18012,18013],{"class":2233},"'John Doe'",[2223,18015,4947],{"class":2328},[2223,18017,18018],{"class":2225,"line":2449},[2223,18019,17573],{"class":2328},[2223,18021,18022],{"class":2225,"line":2454},[2223,18023,2371],{"class":2328},[2223,18025,18026,18028,18030,18033,18035,18037,18039,18041],{"class":2225,"line":1839},[2223,18027,17517],{"class":2229},[2223,18029,3001],{"class":2328},[2223,18031,18032],{"class":2233},"'emits delete event when button clicked'",[2223,18034,269],{"class":2328},[2223,18036,11700],{"class":2900},[2223,18038,3664],{"class":2328},[2223,18040,3353],{"class":2900},[2223,18042,2379],{"class":2328},[2223,18044,18045,18047,18049,18051,18053,18055,18057],{"class":2225,"line":2473},[2223,18046,3673],{"class":2900},[2223,18048,17927],{"class":2904},[2223,18050,2909],{"class":2908},[2223,18052,17932],{"class":2229},[2223,18054,3001],{"class":2328},[2223,18056,17937],{"class":2334},[2223,18058,17940],{"class":2328},[2223,18060,18061,18063],{"class":2225,"line":2483},[2223,18062,17945],{"class":2334},[2223,18064,2379],{"class":2328},[2223,18066,18067,18069,18071,18073,18076,18078,18080,18083],{"class":2225,"line":2493},[2223,18068,17952],{"class":2334},[2223,18070,2874],{"class":2328},[2223,18072,4535],{"class":2334},[2223,18074,18075],{"class":2233}," 'John'",[2223,18077,269],{"class":2328},[2223,18079,11726],{"class":2334},[2223,18081,18082],{"class":2233}," 'john@example.com'",[2223,18084,18085],{"class":2328}," }\n",[2223,18087,18088],{"class":2225,"line":2504},[2223,18089,2507],{"class":2328},[2223,18091,18092],{"class":2225,"line":2510},[2223,18093,17986],{"class":2328},[2223,18095,18096],{"class":2225,"line":2516},[2223,18097,4752],{"class":2328},[2223,18099,18100,18102,18104,18106,18109,18111,18114,18116,18119,18121,18124],{"class":2225,"line":2526},[2223,18101,11719],{"class":2318},[2223,18103,17927],{"class":2334},[2223,18105,260],{"class":2328},[2223,18107,18108],{"class":2229},"find",[2223,18110,3001],{"class":2328},[2223,18112,18113],{"class":2233},"'button.delete'",[2223,18115,3707],{"class":2328},[2223,18117,18118],{"class":2229},"trigger",[2223,18120,3001],{"class":2328},[2223,18122,18123],{"class":2233},"'click'",[2223,18125,4947],{"class":2328},[2223,18127,18128,18130,18132,18134,18136,18139,18141,18144,18147,18150],{"class":2225,"line":2540},[2223,18129,17549],{"class":2229},[2223,18131,3001],{"class":2328},[2223,18133,17999],{"class":2334},[2223,18135,260],{"class":2328},[2223,18137,18138],{"class":2229},"emitted",[2223,18140,3001],{"class":2328},[2223,18142,18143],{"class":2233},"'delete'",[2223,18145,18146],{"class":2328},")).",[2223,18148,18149],{"class":2229},"toBeTruthy",[2223,18151,4389],{"class":2328},[2223,18153,18154],{"class":2225,"line":2552},[2223,18155,17573],{"class":2328},[2223,18157,18158],{"class":2225,"line":2563},[2223,18159,11556],{"class":2328},[16,18161,301],{"id":300},[12,18163,18164,18165,18167],{},"Adopting these Vue 3 patterns will empower you to write cleaner, more modular, and highly maintainable applications. The Composition API, along with features like composables, ",[2220,18166,12226],{},", Suspense, and Teleport, provides a powerful toolkit for tackling complex frontend challenges. As Vue.js continues to evolve, staying updated with these best practices is key to leveraging the framework's full potential.",[6642,18169,18170],{},"html pre.shiki code .sffyN, html code.shiki .sffyN{--shiki-light:#24292E;--shiki-default:#808080;--shiki-dark:#808080}html pre.shiki code .ssFZ1, html code.shiki .ssFZ1{--shiki-light:#22863A;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .sFcZJ, html code.shiki .sFcZJ{--shiki-light:#6F42C1;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .sG4b4, html code.shiki .sG4b4{--shiki-light:#24292E;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .sGDl4, html code.shiki .sGDl4{--shiki-light:#032F62;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .sEkCa, html code.shiki .sEkCa{--shiki-light:#D73A49;--shiki-default:#C586C0;--shiki-dark:#C586C0}html pre.shiki code .sZiGn, html code.shiki .sZiGn{--shiki-light:#24292E;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .s56mj, html code.shiki .s56mj{--shiki-light:#6A737D;--shiki-default:#6A9955;--shiki-dark:#6A9955}html pre.shiki code .s5uUr, html code.shiki .s5uUr{--shiki-light:#D73A49;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .sToQf, html code.shiki .sToQf{--shiki-light:#005CC5;--shiki-default:#4FC1FF;--shiki-dark:#4FC1FF}html pre.shiki code .s1p9p, html code.shiki .s1p9p{--shiki-light:#D73A49;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .svuFb, html code.shiki .svuFb{--shiki-light:#6F42C1;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}html pre.shiki code .seC34, html code.shiki .seC34{--shiki-light:#005CC5;--shiki-default:#B5CEA8;--shiki-dark:#B5CEA8}html pre.shiki code .s9TRk, html code.shiki .s9TRk{--shiki-light:#E36209;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .se2iQ, html code.shiki .se2iQ{--shiki-light:#032F62;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .s5T4v, html code.shiki .s5T4v{--shiki-light:#032F62;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}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 .su_XB, html code.shiki .su_XB{--shiki-light:#6F42C1;--shiki-default:#4EC9B0;--shiki-dark:#4EC9B0}html pre.shiki code .s6-XD, html code.shiki .s6-XD{--shiki-light:#005CC5;--shiki-default:#4EC9B0;--shiki-dark:#4EC9B0}html pre.shiki code .s7v1m, html code.shiki .s7v1m{--shiki-light:#005CC5;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .sUwQ0, html code.shiki .sUwQ0{--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-default:#F44747;--shiki-default-font-style:inherit;--shiki-dark:#F44747;--shiki-dark-font-style:inherit}html pre.shiki code .sps74, html code.shiki .sps74{--shiki-light:#005CC5;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .s4XyT, html code.shiki .s4XyT{--shiki-light:#032F62;--shiki-default:#D16969;--shiki-dark:#D16969}html pre.shiki code .s2gen, html code.shiki .s2gen{--shiki-light:#D73A49;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}html pre.shiki code .sqBZk, html code.shiki .sqBZk{--shiki-light:#005CC5;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .smwCX, html code.shiki .smwCX{--shiki-light:#D73A49;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .suOk-, html code.shiki .suOk-{--shiki-light:#005CC5;--shiki-default:#D16969;--shiki-dark:#D16969}html pre.shiki code .sR-fR, html code.shiki .sR-fR{--shiki-light:#D73A49;--shiki-default:#D7BA7D;--shiki-dark:#D7BA7D}html pre.shiki code .sSxZ1, html code.shiki .sSxZ1{--shiki-light:#22863A;--shiki-light-font-weight:bold;--shiki-default:#D7BA7D;--shiki-default-font-weight:inherit;--shiki-dark:#D7BA7D;--shiki-dark-font-weight:inherit}",{"title":24,"searchDepth":25,"depth":25,"links":18172},[18173,18174,18175,18180,18182,18183,18184,18188,18193,18198,18202],{"id":10396,"depth":28,"text":10397},{"id":10788,"depth":28,"text":10789},{"id":11085,"depth":28,"text":11086,"children":18176},[18177,18178,18179],{"id":11092,"depth":25,"text":11093},{"id":11559,"depth":25,"text":11560},{"id":11926,"depth":25,"text":11927},{"id":12222,"depth":28,"text":18181},"4. Leveraging \u003Cscript setup>",{"id":12262,"depth":28,"text":12263},{"id":12478,"depth":28,"text":12479},{"id":12713,"depth":28,"text":12714,"children":18185},[18186,18187],{"id":12720,"depth":25,"text":12721},{"id":13005,"depth":25,"text":13006},{"id":13447,"depth":28,"text":13448,"children":18189},[18190,18191,18192],{"id":13451,"depth":25,"text":13452},{"id":13719,"depth":25,"text":13720},{"id":14203,"depth":25,"text":14204},{"id":16103,"depth":28,"text":16104,"children":18194},[18195,18196,18197],{"id":16107,"depth":25,"text":16108},{"id":16273,"depth":25,"text":16274},{"id":17131,"depth":25,"text":17132},{"id":17437,"depth":28,"text":17438,"children":18199},[18200,18201],{"id":17441,"depth":25,"text":17442},{"id":17824,"depth":25,"text":17825},{"id":300,"depth":28,"text":301},"Master Vue 3's Composition API, Pinia state management, and advanced patterns for building production-ready applications. Includes real-world examples, TypeScript integration, and performance optimization techniques.","https://images.unsplash.com/photo-1563986768494-4dee2763ff3f?auto=format&fit=crop&w=1200&q=80",{"excerpt":18206},{"type":9,"value":18207},[18208],[12,18209,10393],{},"/essential-vue3-patterns",{"title":10388,"description":18203},"essential-vue3-patterns",[18214,18215,86,1930,2305,18216,18217,18218,18219],"vue3","patterns","frontend","architecture","composition-api","pinia","hWe0jCekUuYQA6Ek0BfVq7Ijxi4_fmq8IF4OUB-dwqc",{"id":18222,"title":18223,"author":7,"body":18224,"category":29,"description":30,"extension":31,"image":18236,"isDraft":33,"isFeatured":34,"locale":35,"meta":18237,"navigation":33,"path":18242,"publishedAt":18243,"readingTime":2382,"seo":18244,"stem":18245,"tags":18246,"updatedAt":18243,"__hash__":18248},"articles_en/expansion-strategies-for-new-markets.md","Expansion Strategies for New Markets",{"type":9,"value":18225,"toc":18233},[18226,18229,18231],[12,18227,18228],{},"Expanding to new markets requires precise strategic planning.",[16,18230,19],{"id":18},[12,18232,22],{},{"title":24,"searchDepth":25,"depth":25,"links":18234},[18235],{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1526304640581-d334cdbbf45e?q=80&w=1200&auto=format&fit=crop",{"excerpt":18238},{"type":9,"value":18239},[18240],[12,18241,18228],{},"/expansion-strategies-for-new-markets","2025-06-17",{"title":18223,"description":30},"expansion-strategies-for-new-markets",[29,47,18247,1757],"expansion","TbMFD69yNNLxwlb_Wt_T8b8CpxpWcfsNxn18kLvNW7c",{"id":18250,"title":18251,"author":7,"body":18252,"category":1829,"description":18279,"extension":31,"image":18280,"isDraft":33,"isFeatured":34,"locale":35,"meta":18281,"navigation":33,"path":18286,"publishedAt":1838,"readingTime":1839,"seo":18287,"stem":18288,"tags":18289,"updatedAt":1838,"__hash__":18293},"articles_en/farmers-ecommerce-marketplace-case-study.md","Farmers E-commerce Marketplace: Direct Farm to Consumer",{"type":9,"value":18253,"toc":18273},[18254,18257,18259,18261,18263,18265,18267,18269,18271],[12,18255,18256],{},"A comprehensive case study of building an e-commerce marketplace that eliminates middlemen between farmers and consumers.",[16,18258,1801],{"id":1800},[12,18260,1804],{},[16,18262,1808],{"id":1807},[12,18264,1804],{},[16,18266,1814],{"id":1813},[12,18268,1804],{},[16,18270,1820],{"id":1819},[12,18272,1804],{},{"title":24,"searchDepth":25,"depth":25,"links":18274},[18275,18276,18277,18278],{"id":1800,"depth":28,"text":1801},{"id":1807,"depth":28,"text":1808},{"id":1813,"depth":28,"text":1814},{"id":1819,"depth":28,"text":1820},"Case study of an e-commerce marketplace platform connecting farmers directly with consumers for fresh fruits and vegetables.","https://images.unsplash.com/photo-1488459716781-31db52582fe9?q=80&w=1200&auto=format&fit=crop",{"excerpt":18282},{"type":9,"value":18283},[18284],[12,18285,18256],{},"/farmers-ecommerce-marketplace-case-study",{"title":18251,"description":18279},"farmers-ecommerce-marketplace-case-study",[1829,73,18290,18291,18292],"ecommerce","agriculture","marketplace","qr-UGCDIiG2c0H8uycEBVCSYauLs_U72OTNWzITVgv8",{"id":18295,"title":18296,"author":7,"body":18297,"category":73,"description":74,"extension":31,"image":18315,"isDraft":33,"isFeatured":34,"locale":35,"meta":18316,"navigation":33,"path":18321,"publishedAt":18322,"readingTime":43,"seo":18323,"stem":18324,"tags":18325,"updatedAt":18322,"__hash__":18327},"articles_en/from-idea-to-prototype-in-14-days.md","From Idea to Prototype in 14 Days",{"type":9,"value":18298,"toc":18311},[18299,18302,18304,18307,18309],[12,18300,18301],{},"How to transform your idea into a testable prototype in just two weeks.",[16,18303,61],{"id":60},[12,18305,18306],{},"Speed of execution is the key to success in the startup world.",[16,18308,19],{"id":18},[12,18310,22],{},{"title":24,"searchDepth":25,"depth":25,"links":18312},[18313,18314],{"id":60,"depth":28,"text":61},{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1507238691740-187a5b1d37b8?q=80&w=1200&auto=format&fit=crop",{"excerpt":18317},{"type":9,"value":18318},[18319],[12,18320,18301],{},"/from-idea-to-prototype-in-14-days","2025-01-14",{"title":18296,"description":74},"from-idea-to-prototype-in-14-days",[73,29,18326],"prototype","iY-cyXG0J3Ew6B0TEfQxQ3FkneFmuQHx7hYN4vQRWpY",{"id":18329,"title":18330,"author":7,"body":18331,"category":29,"description":30,"extension":31,"image":18343,"isDraft":33,"isFeatured":34,"locale":35,"meta":18344,"navigation":33,"path":18349,"publishedAt":18350,"readingTime":1784,"seo":18351,"stem":18352,"tags":18353,"updatedAt":18350,"__hash__":18356},"articles_en/funding-strategies-for-startups.md","Funding Strategies for Startups",{"type":9,"value":18332,"toc":18340},[18333,18336,18338],[12,18334,18335],{},"Learn about different funding strategies and how to choose the best one for your startup.",[16,18337,19],{"id":18},[12,18339,22],{},{"title":24,"searchDepth":25,"depth":25,"links":18341},[18342],{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1579621970563-ebec7560ff3e?q=80&w=1200&auto=format&fit=crop",{"excerpt":18345},{"type":9,"value":18346},[18347],[12,18348,18335],{},"/funding-strategies-for-startups","2025-06-03",{"title":18330,"description":30},"funding-strategies-for-startups",[29,47,18354,18355],"funding","investment","pH-agNfQ8JSvkCrXQLLLMWqSJWqarznIjPyd8UfdNGw",{"id":18358,"title":18359,"author":7,"body":18360,"category":373,"description":18738,"extension":31,"image":18739,"isDraft":34,"isFeatured":34,"locale":35,"meta":18740,"navigation":33,"path":18748,"publishedAt":18749,"readingTime":28,"seo":18750,"stem":18741,"tags":18751,"updatedAt":18752,"__hash__":18753},"articles_en/generate-random-strings-characters-in-javascript.md","Generate random strings/characters in JavaScript",{"type":9,"value":18361,"toc":18733},[18362,18365,18369,18376,18501,18519,18523,18530,18658,18672,18676,18686,18725,18730],[12,18363,18364],{},"We will explore different ways to generate random strings and characters in JavaScript.",[16,18366,18368],{"id":18367},"serverside","Serverside",[12,18370,18371,18372,18375],{},"When working on the server side, you have access to the full Node.js environment, which includes the ",[2220,18373,18374],{},"crypto"," library. This library provides a built-in way to generate cryptographically secure random strings and characters.",[2214,18377,18379],{"className":8398,"code":18378,"language":1930,"meta":24,"style":24},"const crypto = require('crypto');\n\nfunction generateRandomString(length) {\n  return crypto.randomBytes(Math.ceil(length / 2))\n    .toString('hex')\n    .slice(0, length);\n}\nconsole.log(generateRandomString(10));\n",[2220,18380,18381,18400,18404,18417,18446,18460,18476,18480],{"__ignoreMap":24},[2223,18382,18383,18385,18388,18390,18393,18395,18398],{"class":2225,"line":2226},[2223,18384,3564],{"class":2900},[2223,18386,18387],{"class":2904}," crypto",[2223,18389,2909],{"class":2908},[2223,18391,18392],{"class":2229}," require",[2223,18394,3001],{"class":2328},[2223,18396,18397],{"class":2233},"'crypto'",[2223,18399,3691],{"class":2328},[2223,18401,18402],{"class":2225,"line":28},[2223,18403,2616],{"emptyLinePlaceholder":33},[2223,18405,18406,18408,18411,18413,18415],{"class":2225,"line":25},[2223,18407,10753],{"class":2900},[2223,18409,18410],{"class":2229}," generateRandomString",[2223,18412,3001],{"class":2328},[2223,18414,15036],{"class":3131},[2223,18416,4444],{"class":2328},[2223,18418,18419,18421,18423,18425,18428,18430,18432,18434,18436,18438,18440,18442,18444],{"class":2225,"line":2341},[2223,18420,3360],{"class":2318},[2223,18422,18387],{"class":2334},[2223,18424,260],{"class":2328},[2223,18426,18427],{"class":2229},"randomBytes",[2223,18429,3001],{"class":2328},[2223,18431,16501],{"class":2334},[2223,18433,260],{"class":2328},[2223,18435,16432],{"class":2229},[2223,18437,3001],{"class":2328},[2223,18439,15036],{"class":2334},[2223,18441,14099],{"class":2908},[2223,18443,10618],{"class":4463},[2223,18445,16374],{"class":2328},[2223,18447,18448,18450,18453,18455,18458],{"class":2225,"line":336},[2223,18449,4394],{"class":2328},[2223,18451,18452],{"class":2229},"toString",[2223,18454,3001],{"class":2328},[2223,18456,18457],{"class":2233},"'hex'",[2223,18459,4947],{"class":2328},[2223,18461,18462,18464,18466,18468,18470,18472,18474],{"class":2225,"line":2357},[2223,18463,4394],{"class":2328},[2223,18465,16601],{"class":2229},[2223,18467,3001],{"class":2328},[2223,18469,10550],{"class":4463},[2223,18471,269],{"class":2328},[2223,18473,15036],{"class":2334},[2223,18475,3691],{"class":2328},[2223,18477,18478],{"class":2225,"line":2363},[2223,18479,4487],{"class":2328},[2223,18481,18482,18485,18487,18489,18491,18494,18496,18498],{"class":2225,"line":2074},[2223,18483,18484],{"class":2334},"console",[2223,18486,260],{"class":2328},[2223,18488,10665],{"class":2229},[2223,18490,3001],{"class":2328},[2223,18492,18493],{"class":2229},"generateRandomString",[2223,18495,3001],{"class":2328},[2223,18497,11072],{"class":4463},[2223,18499,18500],{"class":2328},"));\n",[12,18502,18503,18504,18507,18508,18510,18511,18514,18515,18518],{},"In this example, we use the ",[2220,18505,18506],{},"randomBytes()"," method of the ",[2220,18509,18374],{}," library to generate a random buffer of bytes. We then convert these bytes to a hexadecimal string using the ",[2220,18512,18513],{},"toString()"," method. Finally, we use the ",[2220,18516,18517],{},"slice()"," method to extract the desired number of characters from the hexadecimal string.",[16,18520,18522],{"id":18521},"clientside","Clientside",[12,18524,18525,18526,18529],{},"When working on the client side, the ",[2220,18527,18528],{},"crypto.getRandomValues()"," method lets you get cryptographically strong random values. The array given as the parameter is filled with random numbers (random in its cryptographic meaning).",[2214,18531,18533],{"className":8398,"code":18532,"language":1930,"meta":24,"style":24},"function generateId (len) {\n  var arr = new Uint8Array((len || 40) / 2)\n  window.crypto.getRandomValues(arr)\n  return Array.from(arr, dec2hex).join('')\n}\n\nconsole.log(generateId())\n",[2220,18534,18535,18549,18582,18603,18634,18638,18642],{"__ignoreMap":24},[2223,18536,18537,18539,18542,18544,18547],{"class":2225,"line":2226},[2223,18538,10753],{"class":2900},[2223,18540,18541],{"class":2229}," generateId",[2223,18543,3340],{"class":2328},[2223,18545,18546],{"class":3131},"len",[2223,18548,4444],{"class":2328},[2223,18550,18551,18554,18557,18559,18562,18565,18567,18569,18571,18574,18576,18578,18580],{"class":2225,"line":28},[2223,18552,18553],{"class":2900},"  var",[2223,18555,18556],{"class":2334}," arr",[2223,18558,2909],{"class":2908},[2223,18560,18561],{"class":2900}," new",[2223,18563,18564],{"class":2229}," Uint8Array",[2223,18566,16619],{"class":2328},[2223,18568,18546],{"class":2334},[2223,18570,5397],{"class":2908},[2223,18572,18573],{"class":4463}," 40",[2223,18575,3350],{"class":2328},[2223,18577,15473],{"class":2908},[2223,18579,10618],{"class":4463},[2223,18581,4947],{"class":2328},[2223,18583,18584,18587,18589,18591,18593,18596,18598,18601],{"class":2225,"line":25},[2223,18585,18586],{"class":2334},"  window",[2223,18588,260],{"class":2328},[2223,18590,18374],{"class":2334},[2223,18592,260],{"class":2328},[2223,18594,18595],{"class":2229},"getRandomValues",[2223,18597,3001],{"class":2328},[2223,18599,18600],{"class":2334},"arr",[2223,18602,4947],{"class":2328},[2223,18604,18605,18607,18609,18611,18613,18615,18617,18619,18622,18624,18627,18629,18632],{"class":2225,"line":2341},[2223,18606,3360],{"class":2318},[2223,18608,4894],{"class":2334},[2223,18610,260],{"class":2328},[2223,18612,2883],{"class":2229},[2223,18614,3001],{"class":2328},[2223,18616,18600],{"class":2334},[2223,18618,269],{"class":2328},[2223,18620,18621],{"class":2334},"dec2hex",[2223,18623,3707],{"class":2328},[2223,18625,18626],{"class":2229},"join",[2223,18628,3001],{"class":2328},[2223,18630,18631],{"class":2233},"''",[2223,18633,4947],{"class":2328},[2223,18635,18636],{"class":2225,"line":336},[2223,18637,4487],{"class":2328},[2223,18639,18640],{"class":2225,"line":2357},[2223,18641,2616],{"emptyLinePlaceholder":33},[2223,18643,18644,18646,18648,18650,18652,18655],{"class":2225,"line":2363},[2223,18645,18484],{"class":2334},[2223,18647,260],{"class":2328},[2223,18649,10665],{"class":2229},[2223,18651,3001],{"class":2328},[2223,18653,18654],{"class":2229},"generateId",[2223,18656,18657],{"class":2328},"())\n",[12,18659,18660,18661,18664,18665,18668,18669,18671],{},"In this example, we create a ",[2220,18662,18663],{},"result"," variable and an array of characters that we want to use to generate the random string. We then use a for loop to generate a random index within the range of the array and use the ",[2220,18666,18667],{},"charAt()"," method to get the character at that index. We add that character to the ",[2220,18670,18663],{}," variable on each iteration of the loop.",[16,18673,18675],{"id":18674},"npm-packages","npm Packages",[12,18677,18678,18679,10420,18682,18685],{},"If you want an even more secure and versatile option, you can use npm packages and libraries like ",[2220,18680,18681],{},"randomstring",[2220,18683,18684],{},"uuid"," that can be used to generate random strings in various formats.",[2214,18687,18689],{"className":8398,"code":18688,"language":1930,"meta":24,"style":24},"const uuidv4 = require('uuid/v4');\nconsole.log(uuidv4());\n",[2220,18690,18691,18709],{"__ignoreMap":24},[2223,18692,18693,18695,18698,18700,18702,18704,18707],{"class":2225,"line":2226},[2223,18694,3564],{"class":2900},[2223,18696,18697],{"class":2904}," uuidv4",[2223,18699,2909],{"class":2908},[2223,18701,18392],{"class":2229},[2223,18703,3001],{"class":2328},[2223,18705,18706],{"class":2233},"'uuid/v4'",[2223,18708,3691],{"class":2328},[2223,18710,18711,18713,18715,18717,18719,18722],{"class":2225,"line":28},[2223,18712,18484],{"class":2334},[2223,18714,260],{"class":2328},[2223,18716,10665],{"class":2229},[2223,18718,3001],{"class":2328},[2223,18720,18721],{"class":2229},"uuidv4",[2223,18723,18724],{"class":2328},"());\n",[12,18726,12229,18727,18729],{},[2220,18728,18684],{}," package can be used to generate universally unique identifiers (UUIDs) which are unique across all devices and at all times.",[6642,18731,18732],{},"html pre.shiki code .s5uUr, html code.shiki .s5uUr{--shiki-light:#D73A49;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .sToQf, html code.shiki .sToQf{--shiki-light:#005CC5;--shiki-default:#4FC1FF;--shiki-dark:#4FC1FF}html pre.shiki code .s1p9p, html code.shiki .s1p9p{--shiki-light:#D73A49;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .svuFb, html code.shiki .svuFb{--shiki-light:#6F42C1;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}html pre.shiki code .sG4b4, html code.shiki .sG4b4{--shiki-light:#24292E;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .sGDl4, html code.shiki .sGDl4{--shiki-light:#032F62;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .s9TRk, html code.shiki .s9TRk{--shiki-light:#E36209;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .sEkCa, html code.shiki .sEkCa{--shiki-light:#D73A49;--shiki-default:#C586C0;--shiki-dark:#C586C0}html pre.shiki code .sZiGn, html code.shiki .sZiGn{--shiki-light:#24292E;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .seC34, html code.shiki .seC34{--shiki-light:#005CC5;--shiki-default:#B5CEA8;--shiki-dark:#B5CEA8}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":24,"searchDepth":25,"depth":25,"links":18734},[18735,18736,18737],{"id":18367,"depth":28,"text":18368},{"id":18521,"depth":28,"text":18522},{"id":18674,"depth":28,"text":18675},"Different ways to generate random strings and characters in JavaScript. whether in the backend, frontend, or through npm packages","__GHOST_URL__/content/images/2023/01/carbon.png",{"slug":18741,"excerpt":18742},"generate-random-strings-characters-in-javascript",{"type":9,"value":18743},[18744,18746],[12,18745,18364],{},[16,18747,18368],{"id":18367},"/generate-random-strings-characters-in-javascript","2023-01-19T13:14:04.000Z",{"title":18359,"description":18738},[1930,340],"2023-01-19T13:17:37.000Z","Qk4t3D6pWqc3LnkSky17Vm1YxrV6FgQH2MTwYQY58yE",{"id":18755,"title":18756,"author":7,"body":18757,"category":373,"description":22393,"extension":31,"image":22394,"isDraft":34,"isFeatured":33,"locale":35,"meta":22395,"navigation":33,"path":22406,"publishedAt":22407,"readingTime":2425,"seo":22408,"stem":22409,"tags":22410,"updatedAt":10339,"__hash__":22412},"articles_en/getting-started-nuxt3.md","Getting Started with Nuxt: A Complete Guide for Modern Web Development",{"type":9,"value":18758,"toc":22348},[18759,18762,18765,18769,18772,18776,18782,18793,18803,18809,18815,18879,18884,18910,18916,18930,18934,18938,18941,18954,18958,18961,18977,18980,18988,18991,19018,19025,19029,19032,19038,19042,19046,19052,19057,19168,19173,19176,19184,19371,19375,19378,19382,19598,19601,19641,19645,19652,19657,19864,19867,19914,19918,19921,19926,20169,20174,20292,20297,20351,20355,20361,20366,20427,20430,20520,20525,20533,20625,20629,20632,20636,20799,20802,20966,20970,20973,20977,20990,20994,21024,21028,21042,21045,21159,21163,21177,21180,21233,21237,21240,21253,21257,21271,21277,21281,21295,21299,21302,21316,21320,21323,21328,21346,21351,21385,21394,21399,21419,21422,21426,21429,21479,21483,21493,21497,21500,21505,21719,21723,21730,21799,21803,21823,21827,21831,22026,22030,22121,22124,22165,22169,22174,22197,22202,22226,22231,22248,22252,22255,22272,22275,22279,22282,22335,22337,22340,22343,22345],[12,18760,18761],{},"Nuxt has become one of the most popular frameworks for building modern web applications with Vue.js. Whether you're creating a blog, an e-commerce site, or a complex web application, Nuxt provides the tools and structure you need to build fast, SEO-friendly, and maintainable projects.",[12,18763,18764],{},"This comprehensive guide will take you from zero to productive with Nuxt, covering everything from basic setup to advanced features and best practices.",[16,18766,18768],{"id":18767},"what-is-nuxt-and-why-should-you-use-it","What is Nuxt and Why Should You Use It?",[12,18770,18771],{},"Nuxt is a framework built on top of Vue.js that adds powerful features for production-ready applications. Think of it as Vue.js with superpowers for building full-stack web applications.",[116,18773,18775],{"id":18774},"key-benefits","Key Benefits",[12,18777,18778,18781],{},[397,18779,18780],{},"1. Server-Side Rendering (SSR) Out of the Box","\nUnlike traditional Vue apps that render on the client, Nuxt can render your pages on the server, delivering fully-formed HTML to the browser. This means:",[190,18783,18784,18787,18790],{},[193,18785,18786],{},"Better SEO (search engines see your full content immediately)",[193,18788,18789],{},"Faster initial page loads",[193,18791,18792],{},"Better performance on slower devices",[12,18794,18795,18798,18799,18802],{},[397,18796,18797],{},"2. File-Based Routing","\nNo need to manually configure routes. Create a file in the ",[2220,18800,18801],{},"pages"," directory, and Nuxt automatically creates a route for it:",[2214,18804,18807],{"className":18805,"code":18806,"language":2671},[2669],"pages/\n  index.vue          → /\n  about.vue          → /about\n  blog/\n    index.vue        → /blog\n    [slug].vue       → /blog/:slug\n",[2220,18808,18806],{"__ignoreMap":24},[12,18810,18811,18814],{},[397,18812,18813],{},"3. Auto-Imports","\nNuxt automatically imports components, composables, and utilities. Write less boilerplate code:",[2214,18816,18818],{"className":3501,"code":18817,"language":3503,"meta":24,"style":24},"\u003C!-- No need to import! -->\n\u003Cscript setup>\nconst count = ref(0)  // ref is auto-imported\nconst route = useRoute()  // useRoute is auto-imported\n\u003C/script>\n",[2220,18819,18820,18825,18835,18855,18871],{"__ignoreMap":24},[2223,18821,18822],{"class":2225,"line":2226},[2223,18823,18824],{"class":2312},"\u003C!-- No need to import! -->\n",[2223,18826,18827,18829,18831,18833],{"class":2225,"line":28},[2223,18828,3113],{"class":3510},[2223,18830,3514],{"class":3513},[2223,18832,3518],{"class":3517},[2223,18834,3530],{"class":3510},[2223,18836,18837,18839,18841,18843,18845,18847,18849,18852],{"class":2225,"line":25},[2223,18838,3564],{"class":2900},[2223,18840,10540],{"class":2904},[2223,18842,2909],{"class":2908},[2223,18844,10545],{"class":2229},[2223,18846,3001],{"class":2328},[2223,18848,10550],{"class":4463},[2223,18850,18851],{"class":2328},")  ",[2223,18853,18854],{"class":2312},"// ref is auto-imported\n",[2223,18856,18857,18859,18861,18863,18865,18868],{"class":2225,"line":2341},[2223,18858,3564],{"class":2900},[2223,18860,4275],{"class":2904},[2223,18862,2909],{"class":2908},[2223,18864,4280],{"class":2229},[2223,18866,18867],{"class":2328},"()  ",[2223,18869,18870],{"class":2312},"// useRoute is auto-imported\n",[2223,18872,18873,18875,18877],{"class":2225,"line":336},[2223,18874,3813],{"class":3510},[2223,18876,3514],{"class":3513},[2223,18878,3530],{"class":3510},[12,18880,18881],{},[397,18882,18883],{},"4. Built on Modern Tools",[190,18885,18886,18892,18898,18904],{},[193,18887,18888,18891],{},[397,18889,18890],{},"Vite"," for lightning-fast development and HMR (Hot Module Replacement)",[193,18893,18894,18897],{},[397,18895,18896],{},"Nitro"," for a powerful, portable server engine",[193,18899,18900,18903],{},[397,18901,18902],{},"TypeScript"," support out of the box",[193,18905,18906,18909],{},[397,18907,18908],{},"Vue 3"," with Composition API",[12,18911,18912,18915],{},[397,18913,18914],{},"5. Flexible Rendering Modes","\nChoose the best approach for each page:",[190,18917,18918,18921,18924,18927],{},[193,18919,18920],{},"SSR (Server-Side Rendering)",[193,18922,18923],{},"SPA (Single Page Application)",[193,18925,18926],{},"SSG (Static Site Generation)",[193,18928,18929],{},"ISR (Incremental Static Regeneration)",[16,18931,18933],{"id":18932},"installing-nuxt","Installing Nuxt",[116,18935,18937],{"id":18936},"prerequisites","Prerequisites",[12,18939,18940],{},"Make sure you have Node.js installed (version 18.0.0 or higher). Check your version:",[2214,18942,18944],{"className":2216,"code":18943,"language":2218,"meta":24,"style":24},"node --version\n",[2220,18945,18946],{"__ignoreMap":24},[2223,18947,18948,18951],{"class":2225,"line":2226},[2223,18949,18950],{"class":2229},"node",[2223,18952,18953],{"class":2546}," --version\n",[116,18955,18957],{"id":18956},"create-your-first-project","Create Your First Project",[12,18959,18960],{},"Open your terminal and run:",[2214,18962,18964],{"className":2216,"code":18963,"language":2218,"meta":24,"style":24},"npx nuxi@latest init my-app\n",[2220,18965,18966],{"__ignoreMap":24},[2223,18967,18968,18970,18972,18974],{"class":2225,"line":2226},[2223,18969,2230],{"class":2229},[2223,18971,2234],{"class":2233},[2223,18973,2237],{"class":2233},[2223,18975,18976],{"class":2233}," my-app\n",[12,18978,18979],{},"You'll be asked a few questions:",[190,18981,18982,18985],{},[193,18983,18984],{},"Package manager: Choose npm, yarn, pnpm, or bun",[193,18986,18987],{},"Initialize git repository: Yes/No",[12,18989,18990],{},"After creation, navigate to your project and start the development server:",[2214,18992,18994],{"className":2216,"code":18993,"language":2218,"meta":24,"style":24},"cd my-app\nnpm install\nnpm run dev\n",[2220,18995,18996,19002,19008],{"__ignoreMap":24},[2223,18997,18998,19000],{"class":2225,"line":2226},[2223,18999,2246],{"class":2245},[2223,19001,18976],{"class":2233},[2223,19003,19004,19006],{"class":2225,"line":28},[2223,19005,2253],{"class":2229},[2223,19007,2256],{"class":2233},[2223,19009,19010,19012,19015],{"class":2225,"line":25},[2223,19011,2253],{"class":2229},[2223,19013,19014],{"class":2233}," run",[2223,19016,19017],{"class":2233}," dev\n",[12,19019,19020,19021,19024],{},"Open your browser to ",[2220,19022,19023],{},"http://localhost:3000"," and you'll see your new Nuxt app!",[116,19026,19028],{"id":19027},"project-structure","Project Structure",[12,19030,19031],{},"Here's what Nuxt creates for you:",[2214,19033,19036],{"className":19034,"code":19035,"language":2671},[2669],"my-app/\n├── .nuxt/              # Generated files (don't edit)\n├── node_modules/       # Dependencies\n├── pages/              # Your application pages\n│   └── index.vue       # Home page (/)\n├── public/             # Static files\n├── server/             # Backend API routes\n├── app.vue             # Root component\n├── nuxt.config.ts      # Nuxt configuration\n└── package.json        # Project metadata\n",[2220,19037,19035],{"__ignoreMap":24},[16,19039,19041],{"id":19040},"essential-concepts","Essential Concepts",[116,19043,19045],{"id":19044},"_1-pages-and-routing","1. Pages and Routing",[12,19047,19048,19049,19051],{},"Create a new file in the ",[2220,19050,18801],{}," directory:",[12,19053,19054],{},[397,19055,19056],{},"pages/about.vue",[2214,19058,19060],{"className":3501,"code":19059,"language":3503,"meta":24,"style":24},"\u003Cscript setup>\ndefinePageMeta({\n  title: 'About Us'\n})\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cdiv>\n    \u003Ch1>About Our Company\u003C/h1>\n    \u003Cp>We build amazing products...\u003C/p>\n  \u003C/div>\n\u003C/template>\n",[2220,19061,19062,19072,19079,19086,19090,19098,19102,19110,19118,19135,19152,19160],{"__ignoreMap":24},[2223,19063,19064,19066,19068,19070],{"class":2225,"line":2226},[2223,19065,3113],{"class":3510},[2223,19067,3514],{"class":3513},[2223,19069,3518],{"class":3517},[2223,19071,3530],{"class":3510},[2223,19073,19074,19077],{"class":2225,"line":28},[2223,19075,19076],{"class":2229},"definePageMeta",[2223,19078,2329],{"class":2328},[2223,19080,19081,19083],{"class":2225,"line":25},[2223,19082,2924],{"class":2334},[2223,19084,19085],{"class":2233}," 'About Us'\n",[2223,19087,19088],{"class":2225,"line":2341},[2223,19089,11556],{"class":2328},[2223,19091,19092,19094,19096],{"class":2225,"line":336},[2223,19093,3813],{"class":3510},[2223,19095,3514],{"class":3513},[2223,19097,3530],{"class":3510},[2223,19099,19100],{"class":2225,"line":2357},[2223,19101,2616],{"emptyLinePlaceholder":33},[2223,19103,19104,19106,19108],{"class":2225,"line":2363},[2223,19105,3113],{"class":3510},[2223,19107,3828],{"class":3513},[2223,19109,3530],{"class":3510},[2223,19111,19112,19114,19116],{"class":2225,"line":2074},[2223,19113,3835],{"class":3510},[2223,19115,3917],{"class":3513},[2223,19117,3530],{"class":3510},[2223,19119,19120,19122,19124,19126,19129,19131,19133],{"class":2225,"line":43},[2223,19121,3845],{"class":3510},[2223,19123,3866],{"class":3513},[2223,19125,4117],{"class":3510},[2223,19127,19128],{"class":2328},"About Our Company",[2223,19130,3813],{"class":3510},[2223,19132,3866],{"class":3513},[2223,19134,3530],{"class":3510},[2223,19136,19137,19139,19141,19143,19146,19148,19150],{"class":2225,"line":2382},[2223,19138,3845],{"class":3510},[2223,19140,12],{"class":3513},[2223,19142,4117],{"class":3510},[2223,19144,19145],{"class":2328},"We build amazing products...",[2223,19147,3813],{"class":3510},[2223,19149,12],{"class":3513},[2223,19151,3530],{"class":3510},[2223,19153,19154,19156,19158],{"class":2225,"line":1784},[2223,19155,4208],{"class":3510},[2223,19157,3917],{"class":3513},[2223,19159,3530],{"class":3510},[2223,19161,19162,19164,19166],{"class":2225,"line":82},[2223,19163,3813],{"class":3510},[2223,19165,3828],{"class":3513},[2223,19167,3530],{"class":3510},[12,19169,19170],{},[397,19171,19172],{},"Dynamic Routes:",[12,19174,19175],{},"Create a file with brackets for dynamic segments:",[12,19177,19178],{},[397,19179,19180,19181,19183],{},"pages/blog/",[2223,19182,4331],{},".vue",[2214,19185,19187],{"className":3501,"code":19186,"language":3503,"meta":24,"style":24},"\u003Cscript setup>\nconst route = useRoute()\nconst slug = route.params.slug\n\n// Fetch blog post based on slug\nconst { data: post } = await useFetch(`/api/posts/${slug}`)\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Carticle>\n    \u003Ch1>{{ post.title }}\u003C/h1>\n    \u003Cdiv v-html=\"post.content\">\u003C/div>\n  \u003C/article>\n\u003C/template>\n",[2220,19188,19189,19199,19211,19231,19235,19240,19275,19283,19287,19295,19303,19327,19355,19363],{"__ignoreMap":24},[2223,19190,19191,19193,19195,19197],{"class":2225,"line":2226},[2223,19192,3113],{"class":3510},[2223,19194,3514],{"class":3513},[2223,19196,3518],{"class":3517},[2223,19198,3530],{"class":3510},[2223,19200,19201,19203,19205,19207,19209],{"class":2225,"line":28},[2223,19202,3564],{"class":2900},[2223,19204,4275],{"class":2904},[2223,19206,2909],{"class":2908},[2223,19208,4280],{"class":2229},[2223,19210,4389],{"class":2328},[2223,19212,19213,19215,19218,19220,19222,19224,19226,19228],{"class":2225,"line":25},[2223,19214,3564],{"class":2900},[2223,19216,19217],{"class":2904}," slug",[2223,19219,2909],{"class":2908},[2223,19221,4275],{"class":2334},[2223,19223,260],{"class":2328},[2223,19225,4326],{"class":2334},[2223,19227,260],{"class":2328},[2223,19229,19230],{"class":2334},"slug\n",[2223,19232,19233],{"class":2225,"line":2341},[2223,19234,2616],{"emptyLinePlaceholder":33},[2223,19236,19237],{"class":2225,"line":336},[2223,19238,19239],{"class":2312},"// Fetch blog post based on slug\n",[2223,19241,19242,19244,19246,19248,19250,19252,19254,19256,19258,19260,19262,19265,19267,19269,19271,19273],{"class":2225,"line":2357},[2223,19243,3564],{"class":2900},[2223,19245,2874],{"class":2328},[2223,19247,3610],{"class":3131},[2223,19249,3613],{"class":2328},[2223,19251,3785],{"class":2904},[2223,19253,2880],{"class":2328},[2223,19255,3524],{"class":2908},[2223,19257,3623],{"class":2318},[2223,19259,13146],{"class":2229},[2223,19261,3001],{"class":2328},[2223,19263,19264],{"class":2233},"`/api/posts/",[2223,19266,3367],{"class":3366},[2223,19268,4331],{"class":2334},[2223,19270,3372],{"class":3366},[2223,19272,3654],{"class":2233},[2223,19274,4947],{"class":2328},[2223,19276,19277,19279,19281],{"class":2225,"line":2363},[2223,19278,3813],{"class":3510},[2223,19280,3514],{"class":3513},[2223,19282,3530],{"class":3510},[2223,19284,19285],{"class":2225,"line":2074},[2223,19286,2616],{"emptyLinePlaceholder":33},[2223,19288,19289,19291,19293],{"class":2225,"line":43},[2223,19290,3113],{"class":3510},[2223,19292,3828],{"class":3513},[2223,19294,3530],{"class":3510},[2223,19296,19297,19299,19301],{"class":2225,"line":2382},[2223,19298,3835],{"class":3510},[2223,19300,4354],{"class":3513},[2223,19302,3530],{"class":3510},[2223,19304,19305,19307,19309,19311,19313,19315,19317,19319,19321,19323,19325],{"class":2225,"line":1784},[2223,19306,3845],{"class":3510},[2223,19308,3866],{"class":3513},[2223,19310,4117],{"class":3510},[2223,19312,4120],{"class":2328},[2223,19314,3785],{"class":2334},[2223,19316,260],{"class":2328},[2223,19318,4068],{"class":2334},[2223,19320,4129],{"class":2328},[2223,19322,3813],{"class":3510},[2223,19324,3866],{"class":3513},[2223,19326,3530],{"class":3510},[2223,19328,19329,19331,19333,19336,19338,19340,19342,19344,19346,19348,19351,19353],{"class":2225,"line":82},[2223,19330,3845],{"class":3510},[2223,19332,3917],{"class":3513},[2223,19334,19335],{"class":3517}," v-html",[2223,19337,3524],{"class":2328},[2223,19339,3944],{"class":3646},[2223,19341,3785],{"class":2334},[2223,19343,260],{"class":2328},[2223,19345,13625],{"class":2334},[2223,19347,3944],{"class":3646},[2223,19349,19350],{"class":3510},">\u003C/",[2223,19352,3917],{"class":3513},[2223,19354,3530],{"class":3510},[2223,19356,19357,19359,19361],{"class":2225,"line":1432},[2223,19358,4208],{"class":3510},[2223,19360,4354],{"class":3513},[2223,19362,3530],{"class":3510},[2223,19364,19365,19367,19369],{"class":2225,"line":369},[2223,19366,3813],{"class":3510},[2223,19368,3828],{"class":3513},[2223,19370,3530],{"class":3510},[116,19372,19374],{"id":19373},"_2-layouts","2. Layouts",[12,19376,19377],{},"Layouts wrap your pages with common structure (header, footer, etc.).",[12,19379,19380],{},[397,19381,5537],{},[2214,19383,19385],{"className":3501,"code":19384,"language":3503,"meta":24,"style":24},"\u003Ctemplate>\n  \u003Cdiv>\n    \u003Cheader>\n      \u003Cnav>\n        \u003CNuxtLink to=\"/\">Home\u003C/NuxtLink>\n        \u003CNuxtLink to=\"/about\">About\u003C/NuxtLink>\n        \u003CNuxtLink to=\"/blog\">Blog\u003C/NuxtLink>\n      \u003C/nav>\n    \u003C/header>\n    \n    \u003Cmain>\n      \u003C!-- Your page content goes here -->\n      \u003Cslot />\n    \u003C/main>\n    \n    \u003Cfooter>\n      \u003Cp>&copy; 2025 My App\u003C/p>\n    \u003C/footer>\n  \u003C/div>\n\u003C/template>\n",[2220,19386,19387,19395,19403,19411,19420,19443,19467,19491,19499,19507,19511,19519,19524,19534,19542,19546,19554,19574,19582,19590],{"__ignoreMap":24},[2223,19388,19389,19391,19393],{"class":2225,"line":2226},[2223,19390,3113],{"class":3510},[2223,19392,3828],{"class":3513},[2223,19394,3530],{"class":3510},[2223,19396,19397,19399,19401],{"class":2225,"line":28},[2223,19398,3835],{"class":3510},[2223,19400,3917],{"class":3513},[2223,19402,3530],{"class":3510},[2223,19404,19405,19407,19409],{"class":2225,"line":25},[2223,19406,3845],{"class":3510},[2223,19408,13879],{"class":3513},[2223,19410,3530],{"class":3510},[2223,19412,19413,19415,19418],{"class":2225,"line":2341},[2223,19414,3863],{"class":3510},[2223,19416,19417],{"class":3513},"nav",[2223,19419,3530],{"class":3510},[2223,19421,19422,19424,19426,19428,19430,19432,19434,19437,19439,19441],{"class":2225,"line":336},[2223,19423,3931],{"class":3510},[2223,19425,4184],{"class":3513},[2223,19427,12542],{"class":3517},[2223,19429,3524],{"class":2328},[2223,19431,6525],{"class":2233},[2223,19433,4117],{"class":3510},[2223,19435,19436],{"class":2328},"Home",[2223,19438,3813],{"class":3510},[2223,19440,4184],{"class":3513},[2223,19442,3530],{"class":3510},[2223,19444,19445,19447,19449,19451,19453,19456,19458,19461,19463,19465],{"class":2225,"line":2357},[2223,19446,3931],{"class":3510},[2223,19448,4184],{"class":3513},[2223,19450,12542],{"class":3517},[2223,19452,3524],{"class":2328},[2223,19454,19455],{"class":2233},"\"/about\"",[2223,19457,4117],{"class":3510},[2223,19459,19460],{"class":2328},"About",[2223,19462,3813],{"class":3510},[2223,19464,4184],{"class":3513},[2223,19466,3530],{"class":3510},[2223,19468,19469,19471,19473,19475,19477,19480,19482,19485,19487,19489],{"class":2225,"line":2363},[2223,19470,3931],{"class":3510},[2223,19472,4184],{"class":3513},[2223,19474,12542],{"class":3517},[2223,19476,3524],{"class":2328},[2223,19478,19479],{"class":2233},"\"/blog\"",[2223,19481,4117],{"class":3510},[2223,19483,19484],{"class":2328},"Blog",[2223,19486,3813],{"class":3510},[2223,19488,4184],{"class":3513},[2223,19490,3530],{"class":3510},[2223,19492,19493,19495,19497],{"class":2225,"line":2074},[2223,19494,3896],{"class":3510},[2223,19496,19417],{"class":3513},[2223,19498,3530],{"class":3510},[2223,19500,19501,19503,19505],{"class":2225,"line":43},[2223,19502,4199],{"class":3510},[2223,19504,13879],{"class":3513},[2223,19506,3530],{"class":3510},[2223,19508,19509],{"class":2225,"line":2382},[2223,19510,4752],{"class":2328},[2223,19512,19513,19515,19517],{"class":2225,"line":1784},[2223,19514,3845],{"class":3510},[2223,19516,3838],{"class":3513},[2223,19518,3530],{"class":3510},[2223,19520,19521],{"class":2225,"line":82},[2223,19522,19523],{"class":2312},"      \u003C!-- Your page content goes here -->\n",[2223,19525,19526,19528,19530,19532],{"class":2225,"line":1432},[2223,19527,3863],{"class":3510},[2223,19529,13915],{"class":3513},[2223,19531,14099],{"class":14098},[2223,19533,3530],{"class":3510},[2223,19535,19536,19538,19540],{"class":2225,"line":369},[2223,19537,4199],{"class":3510},[2223,19539,3838],{"class":3513},[2223,19541,3530],{"class":3510},[2223,19543,19544],{"class":2225,"line":2425},[2223,19545,4752],{"class":2328},[2223,19547,19548,19550,19552],{"class":2225,"line":1750},[2223,19549,3845],{"class":3510},[2223,19551,14047],{"class":3513},[2223,19553,3530],{"class":3510},[2223,19555,19556,19558,19560,19562,19565,19568,19570,19572],{"class":2225,"line":2105},[2223,19557,3863],{"class":3510},[2223,19559,12],{"class":3513},[2223,19561,4117],{"class":3510},[2223,19563,19564],{"class":2546},"&copy;",[2223,19566,19567],{"class":2328}," 2025 My App",[2223,19569,3813],{"class":3510},[2223,19571,12],{"class":3513},[2223,19573,3530],{"class":3510},[2223,19575,19576,19578,19580],{"class":2225,"line":2449},[2223,19577,4199],{"class":3510},[2223,19579,14047],{"class":3513},[2223,19581,3530],{"class":3510},[2223,19583,19584,19586,19588],{"class":2225,"line":2454},[2223,19585,4208],{"class":3510},[2223,19587,3917],{"class":3513},[2223,19589,3530],{"class":3510},[2223,19591,19592,19594,19596],{"class":2225,"line":1839},[2223,19593,3813],{"class":3510},[2223,19595,3828],{"class":3513},[2223,19597,3530],{"class":3510},[12,19599,19600],{},"Use it in a page:",[2214,19602,19604],{"className":3501,"code":19603,"language":3503,"meta":24,"style":24},"\u003Cscript setup>\ndefinePageMeta({\n  layout: 'default'\n})\n\u003C/script>\n",[2220,19605,19606,19616,19622,19629,19633],{"__ignoreMap":24},[2223,19607,19608,19610,19612,19614],{"class":2225,"line":2226},[2223,19609,3113],{"class":3510},[2223,19611,3514],{"class":3513},[2223,19613,3518],{"class":3517},[2223,19615,3530],{"class":3510},[2223,19617,19618,19620],{"class":2225,"line":28},[2223,19619,19076],{"class":2229},[2223,19621,2329],{"class":2328},[2223,19623,19624,19627],{"class":2225,"line":25},[2223,19625,19626],{"class":2334},"  layout:",[2223,19628,13813],{"class":2233},[2223,19630,19631],{"class":2225,"line":2341},[2223,19632,11556],{"class":2328},[2223,19634,19635,19637,19639],{"class":2225,"line":336},[2223,19636,3813],{"class":3510},[2223,19638,3514],{"class":3513},[2223,19640,3530],{"class":3510},[116,19642,19644],{"id":19643},"_3-components","3. Components",[12,19646,19647,19648,19651],{},"Components in the ",[2220,19649,19650],{},"components"," directory are automatically imported:",[12,19653,19654],{},[397,19655,19656],{},"components/Button.vue",[2214,19658,19660],{"className":3501,"code":19659,"language":3503,"meta":24,"style":24},"\u003Cscript setup>\ndefineProps\u003C{\n  label: string\n  variant?: 'primary' | 'secondary'\n}>()\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cbutton :class=\"variant\">\n    {{ label }}\n  \u003C/button>\n\u003C/template>\n\n\u003Cstyle scoped>\n.primary {\n  background: #f97216;\n  color: white;\n}\n.secondary {\n  background: #6b7280;\n  color: white;\n}\n\u003C/style>\n",[2220,19661,19662,19672,19679,19688,19702,19707,19715,19719,19727,19747,19757,19765,19773,19777,19788,19796,19808,19820,19824,19831,19842,19852,19856],{"__ignoreMap":24},[2223,19663,19664,19666,19668,19670],{"class":2225,"line":2226},[2223,19665,3113],{"class":3510},[2223,19667,3514],{"class":3513},[2223,19669,3518],{"class":3517},[2223,19671,3530],{"class":3510},[2223,19673,19674,19676],{"class":2225,"line":28},[2223,19675,12255],{"class":2229},[2223,19677,19678],{"class":2328},"\u003C{\n",[2223,19680,19681,19684,19686],{"class":2225,"line":25},[2223,19682,19683],{"class":3131},"  label",[2223,19685,2300],{"class":2908},[2223,19687,12761],{"class":3137},[2223,19689,19690,19692,19694,19697,19699],{"class":2225,"line":2341},[2223,19691,13767],{"class":3131},[2223,19693,3214],{"class":2908},[2223,19695,19696],{"class":2233}," 'primary'",[2223,19698,5229],{"class":2908},[2223,19700,19701],{"class":2233}," 'secondary'\n",[2223,19703,19704],{"class":2225,"line":336},[2223,19705,19706],{"class":2328},"}>()\n",[2223,19708,19709,19711,19713],{"class":2225,"line":2357},[2223,19710,3813],{"class":3510},[2223,19712,3514],{"class":3513},[2223,19714,3530],{"class":3510},[2223,19716,19717],{"class":2225,"line":2363},[2223,19718,2616],{"emptyLinePlaceholder":33},[2223,19720,19721,19723,19725],{"class":2225,"line":2074},[2223,19722,3113],{"class":3510},[2223,19724,3828],{"class":3513},[2223,19726,3530],{"class":3510},[2223,19728,19729,19731,19733,19735,19737,19739,19741,19743,19745],{"class":2225,"line":43},[2223,19730,3835],{"class":3510},[2223,19732,11833],{"class":3513},[2223,19734,4762],{"class":2328},[2223,19736,12179],{"class":3517},[2223,19738,3524],{"class":2328},[2223,19740,3944],{"class":3646},[2223,19742,13859],{"class":2334},[2223,19744,3944],{"class":3646},[2223,19746,3530],{"class":3510},[2223,19748,19749,19752,19755],{"class":2225,"line":2382},[2223,19750,19751],{"class":2328},"    {{ ",[2223,19753,19754],{"class":2334},"label",[2223,19756,5082],{"class":2328},[2223,19758,19759,19761,19763],{"class":2225,"line":1784},[2223,19760,4208],{"class":3510},[2223,19762,11833],{"class":3513},[2223,19764,3530],{"class":3510},[2223,19766,19767,19769,19771],{"class":2225,"line":82},[2223,19768,3813],{"class":3510},[2223,19770,3828],{"class":3513},[2223,19772,3530],{"class":3510},[2223,19774,19775],{"class":2225,"line":1432},[2223,19776,2616],{"emptyLinePlaceholder":33},[2223,19778,19779,19781,19783,19786],{"class":2225,"line":369},[2223,19780,3113],{"class":3510},[2223,19782,6642],{"class":3513},[2223,19784,19785],{"class":3517}," scoped",[2223,19787,3530],{"class":3510},[2223,19789,19790,19794],{"class":2225,"line":2425},[2223,19791,19793],{"class":19792},"sO3gw",".primary",[2223,19795,2379],{"class":2328},[2223,19797,19798,19801,19803,19806],{"class":2225,"line":1750},[2223,19799,19800],{"class":6878},"  background",[2223,19802,3613],{"class":2328},[2223,19804,19805],{"class":5963},"#f97216",[2223,19807,2889],{"class":2328},[2223,19809,19810,19813,19815,19818],{"class":2225,"line":2105},[2223,19811,19812],{"class":6878},"  color",[2223,19814,3613],{"class":2328},[2223,19816,19817],{"class":5963},"white",[2223,19819,2889],{"class":2328},[2223,19821,19822],{"class":2225,"line":2449},[2223,19823,4487],{"class":2328},[2223,19825,19826,19829],{"class":2225,"line":2454},[2223,19827,19828],{"class":19792},".secondary",[2223,19830,2379],{"class":2328},[2223,19832,19833,19835,19837,19840],{"class":2225,"line":1839},[2223,19834,19800],{"class":6878},[2223,19836,3613],{"class":2328},[2223,19838,19839],{"class":5963},"#6b7280",[2223,19841,2889],{"class":2328},[2223,19843,19844,19846,19848,19850],{"class":2225,"line":2473},[2223,19845,19812],{"class":6878},[2223,19847,3613],{"class":2328},[2223,19849,19817],{"class":5963},[2223,19851,2889],{"class":2328},[2223,19853,19854],{"class":2225,"line":2483},[2223,19855,4487],{"class":2328},[2223,19857,19858,19860,19862],{"class":2225,"line":2493},[2223,19859,3813],{"class":3510},[2223,19861,6642],{"class":3513},[2223,19863,3530],{"class":3510},[12,19865,19866],{},"Use it anywhere without importing:",[2214,19868,19870],{"className":3501,"code":19869,"language":3503,"meta":24,"style":24},"\u003Ctemplate>\n  \u003CButton label=\"Click me\" variant=\"primary\" />\n\u003C/template>\n",[2220,19871,19872,19880,19906],{"__ignoreMap":24},[2223,19873,19874,19876,19878],{"class":2225,"line":2226},[2223,19875,3113],{"class":3510},[2223,19877,3828],{"class":3513},[2223,19879,3530],{"class":3510},[2223,19881,19882,19884,19887,19890,19892,19895,19897,19899,19902,19904],{"class":2225,"line":28},[2223,19883,3835],{"class":3510},[2223,19885,19886],{"class":3513},"Button",[2223,19888,19889],{"class":3517}," label",[2223,19891,3524],{"class":2328},[2223,19893,19894],{"class":2233},"\"Click me\"",[2223,19896,14143],{"class":3517},[2223,19898,3524],{"class":2328},[2223,19900,19901],{"class":2233},"\"primary\"",[2223,19903,14099],{"class":14098},[2223,19905,3530],{"class":3510},[2223,19907,19908,19910,19912],{"class":2225,"line":25},[2223,19909,3813],{"class":3510},[2223,19911,3828],{"class":3513},[2223,19913,3530],{"class":3510},[116,19915,19917],{"id":19916},"_4-data-fetching","4. Data Fetching",[12,19919,19920],{},"Nuxt provides powerful composables for fetching data:",[12,19922,19923],{},[397,19924,19925],{},"useFetch - For External APIs",[2214,19927,19929],{"className":3501,"code":19928,"language":3503,"meta":24,"style":24},"\u003Cscript setup>\n// Automatically fetches on server and client\nconst { data: users, pending, error } = await useFetch('https://api.example.com/users')\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cdiv>\n    \u003Cp v-if=\"pending\">Loading...\u003C/p>\n    \u003Cp v-else-if=\"error\">Error: {{ error.message }}\u003C/p>\n    \u003Cul v-else>\n      \u003Cli v-for=\"user in users\" :key=\"user.id\">\n        {{ user.name }}\n      \u003C/li>\n    \u003C/ul>\n  \u003C/div>\n\u003C/template>\n",[2220,19930,19931,19941,19946,19983,19991,19995,20003,20011,20038,20075,20085,20125,20137,20145,20153,20161],{"__ignoreMap":24},[2223,19932,19933,19935,19937,19939],{"class":2225,"line":2226},[2223,19934,3113],{"class":3510},[2223,19936,3514],{"class":3513},[2223,19938,3518],{"class":3517},[2223,19940,3530],{"class":3510},[2223,19942,19943],{"class":2225,"line":28},[2223,19944,19945],{"class":2312},"// Automatically fetches on server and client\n",[2223,19947,19948,19950,19952,19954,19956,19959,19961,19964,19966,19968,19970,19972,19974,19976,19978,19981],{"class":2225,"line":25},[2223,19949,3564],{"class":2900},[2223,19951,2874],{"class":2328},[2223,19953,3610],{"class":3131},[2223,19955,3613],{"class":2328},[2223,19957,19958],{"class":2904},"users",[2223,19960,269],{"class":2328},[2223,19962,19963],{"class":2904},"pending",[2223,19965,269],{"class":2328},[2223,19967,11391],{"class":2904},[2223,19969,2880],{"class":2328},[2223,19971,3524],{"class":2908},[2223,19973,3623],{"class":2318},[2223,19975,13146],{"class":2229},[2223,19977,3001],{"class":2328},[2223,19979,19980],{"class":2233},"'https://api.example.com/users'",[2223,19982,4947],{"class":2328},[2223,19984,19985,19987,19989],{"class":2225,"line":2341},[2223,19986,3813],{"class":3510},[2223,19988,3514],{"class":3513},[2223,19990,3530],{"class":3510},[2223,19992,19993],{"class":2225,"line":336},[2223,19994,2616],{"emptyLinePlaceholder":33},[2223,19996,19997,19999,20001],{"class":2225,"line":2357},[2223,19998,3113],{"class":3510},[2223,20000,3828],{"class":3513},[2223,20002,3530],{"class":3510},[2223,20004,20005,20007,20009],{"class":2225,"line":2363},[2223,20006,3835],{"class":3510},[2223,20008,3917],{"class":3513},[2223,20010,3530],{"class":3510},[2223,20012,20013,20015,20017,20019,20021,20023,20025,20027,20029,20032,20034,20036],{"class":2225,"line":2074},[2223,20014,3845],{"class":3510},[2223,20016,12],{"class":3513},[2223,20018,11794],{"class":2318},[2223,20020,3524],{"class":2328},[2223,20022,3944],{"class":3646},[2223,20024,19963],{"class":2334},[2223,20026,3944],{"class":3646},[2223,20028,4117],{"class":3510},[2223,20030,20031],{"class":2328},"Loading...",[2223,20033,3813],{"class":3510},[2223,20035,12],{"class":3513},[2223,20037,3530],{"class":3510},[2223,20039,20040,20042,20044,20047,20049,20051,20053,20055,20057,20060,20062,20064,20067,20069,20071,20073],{"class":2225,"line":43},[2223,20041,3845],{"class":3510},[2223,20043,12],{"class":3513},[2223,20045,20046],{"class":2318}," v-else-if",[2223,20048,3524],{"class":2328},[2223,20050,3944],{"class":3646},[2223,20052,11391],{"class":2334},[2223,20054,3944],{"class":3646},[2223,20056,4117],{"class":3510},[2223,20058,20059],{"class":2328},"Error: {{ ",[2223,20061,11391],{"class":2334},[2223,20063,260],{"class":2328},[2223,20065,20066],{"class":2334},"message",[2223,20068,4129],{"class":2328},[2223,20070,3813],{"class":3510},[2223,20072,12],{"class":3513},[2223,20074,3530],{"class":3510},[2223,20076,20077,20079,20081,20083],{"class":2225,"line":2382},[2223,20078,3845],{"class":3510},[2223,20080,190],{"class":3513},[2223,20082,11875],{"class":2318},[2223,20084,3530],{"class":3510},[2223,20086,20087,20089,20091,20094,20096,20098,20100,20102,20105,20107,20109,20111,20113,20115,20117,20119,20121,20123],{"class":2225,"line":1784},[2223,20088,3863],{"class":3510},[2223,20090,193],{"class":3513},[2223,20092,20093],{"class":2318}," v-for",[2223,20095,3524],{"class":2328},[2223,20097,3944],{"class":3646},[2223,20099,10730],{"class":2334},[2223,20101,3949],{"class":2900},[2223,20103,20104],{"class":2334}," users",[2223,20106,3944],{"class":3646},[2223,20108,4762],{"class":2328},[2223,20110,3962],{"class":3517},[2223,20112,3524],{"class":2328},[2223,20114,3944],{"class":3646},[2223,20116,10730],{"class":2334},[2223,20118,260],{"class":2328},[2223,20120,12874],{"class":2334},[2223,20122,3944],{"class":3646},[2223,20124,3530],{"class":3510},[2223,20126,20127,20129,20131,20133,20135],{"class":2225,"line":82},[2223,20128,3880],{"class":2328},[2223,20130,10730],{"class":2334},[2223,20132,260],{"class":2328},[2223,20134,167],{"class":2334},[2223,20136,5082],{"class":2328},[2223,20138,20139,20141,20143],{"class":2225,"line":1432},[2223,20140,3896],{"class":3510},[2223,20142,193],{"class":3513},[2223,20144,3530],{"class":3510},[2223,20146,20147,20149,20151],{"class":2225,"line":369},[2223,20148,4199],{"class":3510},[2223,20150,190],{"class":3513},[2223,20152,3530],{"class":3510},[2223,20154,20155,20157,20159],{"class":2225,"line":2425},[2223,20156,4208],{"class":3510},[2223,20158,3917],{"class":3513},[2223,20160,3530],{"class":3510},[2223,20162,20163,20165,20167],{"class":2225,"line":1750},[2223,20164,3813],{"class":3510},[2223,20166,3828],{"class":3513},[2223,20168,3530],{"class":3510},[12,20170,20171],{},[397,20172,20173],{},"useAsyncData - For More Control",[2214,20175,20177],{"className":3501,"code":20176,"language":3503,"meta":24,"style":24},"\u003Cscript setup>\nconst { data: products } = await useAsyncData('products', async () => {\n  // Custom fetch logic\n  const response = await $fetch('/api/products', {\n    params: { category: 'electronics' }\n  })\n  return response.data\n})\n\u003C/script>\n",[2220,20178,20179,20189,20225,20230,20250,20265,20269,20280,20284],{"__ignoreMap":24},[2223,20180,20181,20183,20185,20187],{"class":2225,"line":2226},[2223,20182,3113],{"class":3510},[2223,20184,3514],{"class":3513},[2223,20186,3518],{"class":3517},[2223,20188,3530],{"class":3510},[2223,20190,20191,20193,20195,20197,20199,20202,20204,20206,20208,20210,20212,20215,20217,20219,20221,20223],{"class":2225,"line":28},[2223,20192,3564],{"class":2900},[2223,20194,2874],{"class":2328},[2223,20196,3610],{"class":3131},[2223,20198,3613],{"class":2328},[2223,20200,20201],{"class":2904},"products",[2223,20203,2880],{"class":2328},[2223,20205,3524],{"class":2908},[2223,20207,3623],{"class":2318},[2223,20209,3626],{"class":2229},[2223,20211,3001],{"class":2328},[2223,20213,20214],{"class":2233},"'products'",[2223,20216,269],{"class":2328},[2223,20218,11700],{"class":2900},[2223,20220,3664],{"class":2328},[2223,20222,3353],{"class":2900},[2223,20224,2379],{"class":2328},[2223,20226,20227],{"class":2225,"line":25},[2223,20228,20229],{"class":2312},"  // Custom fetch logic\n",[2223,20231,20232,20234,20236,20238,20240,20243,20245,20248],{"class":2225,"line":2341},[2223,20233,5184],{"class":2900},[2223,20235,11342],{"class":2904},[2223,20237,2909],{"class":2908},[2223,20239,3623],{"class":2318},[2223,20241,20242],{"class":2229}," $fetch",[2223,20244,3001],{"class":2328},[2223,20246,20247],{"class":2233},"'/api/products'",[2223,20249,17940],{"class":2328},[2223,20251,20252,20255,20257,20260,20263],{"class":2225,"line":336},[2223,20253,20254],{"class":2334},"    params:",[2223,20256,2874],{"class":2328},[2223,20258,20259],{"class":2334},"category:",[2223,20261,20262],{"class":2233}," 'electronics'",[2223,20264,18085],{"class":2328},[2223,20266,20267],{"class":2225,"line":2357},[2223,20268,17573],{"class":2328},[2223,20270,20271,20273,20275,20277],{"class":2225,"line":2363},[2223,20272,3360],{"class":2318},[2223,20274,11342],{"class":2334},[2223,20276,260],{"class":2328},[2223,20278,20279],{"class":2334},"data\n",[2223,20281,20282],{"class":2225,"line":2074},[2223,20283,11556],{"class":2328},[2223,20285,20286,20288,20290],{"class":2225,"line":43},[2223,20287,3813],{"class":3510},[2223,20289,3514],{"class":3513},[2223,20291,3530],{"class":3510},[12,20293,20294],{},[397,20295,20296],{},"useLazyFetch - For Client-Side Loading",[2214,20298,20300],{"className":3501,"code":20299,"language":3503,"meta":24,"style":24},"\u003Cscript setup>\n// Doesn't block page render\nconst { data, pending } = useLazyFetch('/api/heavy-data')\n\u003C/script>\n",[2220,20301,20302,20312,20317,20343],{"__ignoreMap":24},[2223,20303,20304,20306,20308,20310],{"class":2225,"line":2226},[2223,20305,3113],{"class":3510},[2223,20307,3514],{"class":3513},[2223,20309,3518],{"class":3517},[2223,20311,3530],{"class":3510},[2223,20313,20314],{"class":2225,"line":28},[2223,20315,20316],{"class":2312},"// Doesn't block page render\n",[2223,20318,20319,20321,20323,20325,20327,20329,20331,20333,20336,20338,20341],{"class":2225,"line":25},[2223,20320,3564],{"class":2900},[2223,20322,2874],{"class":2328},[2223,20324,3610],{"class":2904},[2223,20326,269],{"class":2328},[2223,20328,19963],{"class":2904},[2223,20330,2880],{"class":2328},[2223,20332,3524],{"class":2908},[2223,20334,20335],{"class":2229}," useLazyFetch",[2223,20337,3001],{"class":2328},[2223,20339,20340],{"class":2233},"'/api/heavy-data'",[2223,20342,4947],{"class":2328},[2223,20344,20345,20347,20349],{"class":2225,"line":2341},[2223,20346,3813],{"class":3510},[2223,20348,3514],{"class":3513},[2223,20350,3530],{"class":3510},[116,20352,20354],{"id":20353},"_5-server-routes-api","5. Server Routes (API)",[12,20356,20357,20358,19051],{},"Create backend endpoints in the ",[2220,20359,20360],{},"server/api",[12,20362,20363],{},[397,20364,20365],{},"server/api/hello.ts",[2214,20367,20369],{"className":2303,"code":20368,"language":2305,"meta":24,"style":24},"export default defineEventHandler(() => {\n  return {\n    message: 'Hello from the server!',\n    timestamp: new Date().toISOString()\n  }\n})\n",[2220,20370,20371,20386,20392,20402,20419,20423],{"__ignoreMap":24},[2223,20372,20373,20375,20377,20380,20382,20384],{"class":2225,"line":2226},[2223,20374,2319],{"class":2318},[2223,20376,2322],{"class":2318},[2223,20378,20379],{"class":2229}," defineEventHandler",[2223,20381,3760],{"class":2328},[2223,20383,3353],{"class":2900},[2223,20385,2379],{"class":2328},[2223,20387,20388,20390],{"class":2225,"line":28},[2223,20389,3360],{"class":2318},[2223,20391,2379],{"class":2328},[2223,20393,20394,20397,20400],{"class":2225,"line":25},[2223,20395,20396],{"class":2334},"    message:",[2223,20398,20399],{"class":2233}," 'Hello from the server!'",[2223,20401,2347],{"class":2328},[2223,20403,20404,20407,20409,20412,20414,20417],{"class":2225,"line":2341},[2223,20405,20406],{"class":2334},"    timestamp:",[2223,20408,18561],{"class":2900},[2223,20410,20411],{"class":2229}," Date",[2223,20413,3029],{"class":2328},[2223,20415,20416],{"class":2229},"toISOString",[2223,20418,4389],{"class":2328},[2223,20420,20421],{"class":2225,"line":336},[2223,20422,2652],{"class":2328},[2223,20424,20425],{"class":2225,"line":2357},[2223,20426,11556],{"class":2328},[12,20428,20429],{},"Access it from your frontend:",[2214,20431,20433],{"className":3501,"code":20432,"language":3503,"meta":24,"style":24},"\u003Cscript setup>\nconst { data } = await useFetch('/api/hello')\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cp>{{ data.message }}\u003C/p>\n\u003C/template>\n",[2220,20434,20435,20445,20468,20476,20480,20488,20512],{"__ignoreMap":24},[2223,20436,20437,20439,20441,20443],{"class":2225,"line":2226},[2223,20438,3113],{"class":3510},[2223,20440,3514],{"class":3513},[2223,20442,3518],{"class":3517},[2223,20444,3530],{"class":3510},[2223,20446,20447,20449,20451,20453,20455,20457,20459,20461,20463,20466],{"class":2225,"line":28},[2223,20448,3564],{"class":2900},[2223,20450,2874],{"class":2328},[2223,20452,3610],{"class":2904},[2223,20454,2880],{"class":2328},[2223,20456,3524],{"class":2908},[2223,20458,3623],{"class":2318},[2223,20460,13146],{"class":2229},[2223,20462,3001],{"class":2328},[2223,20464,20465],{"class":2233},"'/api/hello'",[2223,20467,4947],{"class":2328},[2223,20469,20470,20472,20474],{"class":2225,"line":25},[2223,20471,3813],{"class":3510},[2223,20473,3514],{"class":3513},[2223,20475,3530],{"class":3510},[2223,20477,20478],{"class":2225,"line":2341},[2223,20479,2616],{"emptyLinePlaceholder":33},[2223,20481,20482,20484,20486],{"class":2225,"line":336},[2223,20483,3113],{"class":3510},[2223,20485,3828],{"class":3513},[2223,20487,3530],{"class":3510},[2223,20489,20490,20492,20494,20496,20498,20500,20502,20504,20506,20508,20510],{"class":2225,"line":2357},[2223,20491,3835],{"class":3510},[2223,20493,12],{"class":3513},[2223,20495,4117],{"class":3510},[2223,20497,4120],{"class":2328},[2223,20499,3610],{"class":2334},[2223,20501,260],{"class":2328},[2223,20503,20066],{"class":2334},[2223,20505,4129],{"class":2328},[2223,20507,3813],{"class":3510},[2223,20509,12],{"class":3513},[2223,20511,3530],{"class":3510},[2223,20513,20514,20516,20518],{"class":2225,"line":2363},[2223,20515,3813],{"class":3510},[2223,20517,3828],{"class":3513},[2223,20519,3530],{"class":3510},[12,20521,20522],{},[397,20523,20524],{},"With Parameters:",[12,20526,20527],{},[397,20528,20529,20530,20532],{},"server/api/users/",[2223,20531,12874],{},".ts",[2214,20534,20536],{"className":2303,"code":20535,"language":2305,"meta":24,"style":24},"export default defineEventHandler((event) => {\n  const id = getRouterParam(event, 'id')\n  \n  // Fetch user from database\n  return {\n    id,\n    name: 'John Doe',\n    email: 'john@example.com'\n  }\n})\n",[2220,20537,20538,20557,20580,20584,20589,20595,20602,20611,20617,20621],{"__ignoreMap":24},[2223,20539,20540,20542,20544,20546,20548,20551,20553,20555],{"class":2225,"line":2226},[2223,20541,2319],{"class":2318},[2223,20543,2322],{"class":2318},[2223,20545,20379],{"class":2229},[2223,20547,16619],{"class":2328},[2223,20549,20550],{"class":3131},"event",[2223,20552,3350],{"class":2328},[2223,20554,3353],{"class":2900},[2223,20556,2379],{"class":2328},[2223,20558,20559,20561,20564,20566,20569,20571,20573,20575,20578],{"class":2225,"line":28},[2223,20560,5184],{"class":2900},[2223,20562,20563],{"class":2904}," id",[2223,20565,2909],{"class":2908},[2223,20567,20568],{"class":2229}," getRouterParam",[2223,20570,3001],{"class":2328},[2223,20572,20550],{"class":2334},[2223,20574,269],{"class":2328},[2223,20576,20577],{"class":2233},"'id'",[2223,20579,4947],{"class":2328},[2223,20581,20582],{"class":2225,"line":25},[2223,20583,2371],{"class":2328},[2223,20585,20586],{"class":2225,"line":2341},[2223,20587,20588],{"class":2312},"  // Fetch user from database\n",[2223,20590,20591,20593],{"class":2225,"line":336},[2223,20592,3360],{"class":2318},[2223,20594,2379],{"class":2328},[2223,20596,20597,20600],{"class":2225,"line":2357},[2223,20598,20599],{"class":2334},"    id",[2223,20601,2347],{"class":2328},[2223,20603,20604,20607,20609],{"class":2225,"line":2363},[2223,20605,20606],{"class":2334},"    name:",[2223,20608,17962],{"class":2233},[2223,20610,2347],{"class":2328},[2223,20612,20613,20615],{"class":2225,"line":2074},[2223,20614,15334],{"class":2334},[2223,20616,17972],{"class":2233},[2223,20618,20619],{"class":2225,"line":43},[2223,20620,2652],{"class":2328},[2223,20622,20623],{"class":2225,"line":2382},[2223,20624,11556],{"class":2328},[116,20626,20628],{"id":20627},"_6-composables","6. Composables",[12,20630,20631],{},"Composables are reusable functions that encapsulate reactive logic:",[12,20633,20634],{},[397,20635,10823],{},[2214,20637,20639],{"className":2303,"code":20638,"language":2305,"meta":24,"style":24},"export const useCounter = (initialValue = 0) => {\n  const count = ref(initialValue)\n  \n  const increment = () => count.value++\n  const decrement = () => count.value--\n  const reset = () => count.value = initialValue\n  \n  return {\n    count: readonly(count),\n    increment,\n    decrement,\n    reset\n  }\n}\n",[2220,20640,20641,20665,20681,20685,20706,20727,20750,20754,20760,20774,20780,20787,20791,20795],{"__ignoreMap":24},[2223,20642,20643,20645,20647,20649,20651,20653,20655,20657,20659,20661,20663],{"class":2225,"line":2226},[2223,20644,2319],{"class":2318},[2223,20646,2901],{"class":2900},[2223,20648,10862],{"class":2229},[2223,20650,2909],{"class":2908},[2223,20652,3340],{"class":2328},[2223,20654,10867],{"class":3131},[2223,20656,2909],{"class":2908},[2223,20658,10872],{"class":4463},[2223,20660,3350],{"class":2328},[2223,20662,3353],{"class":2900},[2223,20664,2379],{"class":2328},[2223,20666,20667,20669,20671,20673,20675,20677,20679],{"class":2225,"line":28},[2223,20668,5184],{"class":2900},[2223,20670,10540],{"class":2904},[2223,20672,2909],{"class":2908},[2223,20674,10545],{"class":2229},[2223,20676,3001],{"class":2328},[2223,20678,10867],{"class":2334},[2223,20680,4947],{"class":2328},[2223,20682,20683],{"class":2225,"line":25},[2223,20684,2371],{"class":2328},[2223,20686,20687,20689,20691,20693,20695,20697,20699,20701,20703],{"class":2225,"line":2341},[2223,20688,5184],{"class":2900},[2223,20690,10756],{"class":2229},[2223,20692,2909],{"class":2908},[2223,20694,3664],{"class":2328},[2223,20696,3353],{"class":2900},[2223,20698,10540],{"class":2334},[2223,20700,260],{"class":2328},[2223,20702,3649],{"class":2334},[2223,20704,20705],{"class":2908},"++\n",[2223,20707,20708,20710,20712,20714,20716,20718,20720,20722,20724],{"class":2225,"line":336},[2223,20709,5184],{"class":2900},[2223,20711,10919],{"class":2229},[2223,20713,2909],{"class":2908},[2223,20715,3664],{"class":2328},[2223,20717,3353],{"class":2900},[2223,20719,10540],{"class":2334},[2223,20721,260],{"class":2328},[2223,20723,3649],{"class":2334},[2223,20725,20726],{"class":2908},"--\n",[2223,20728,20729,20731,20733,20735,20737,20739,20741,20743,20745,20747],{"class":2225,"line":2357},[2223,20730,5184],{"class":2900},[2223,20732,8929],{"class":2229},[2223,20734,2909],{"class":2908},[2223,20736,3664],{"class":2328},[2223,20738,3353],{"class":2900},[2223,20740,10540],{"class":2334},[2223,20742,260],{"class":2328},[2223,20744,3649],{"class":2334},[2223,20746,2909],{"class":2908},[2223,20748,20749],{"class":2334}," initialValue\n",[2223,20751,20752],{"class":2225,"line":2363},[2223,20753,2371],{"class":2328},[2223,20755,20756,20758],{"class":2225,"line":2074},[2223,20757,3360],{"class":2318},[2223,20759,2379],{"class":2328},[2223,20761,20762,20765,20768,20770,20772],{"class":2225,"line":43},[2223,20763,20764],{"class":2334},"    count:",[2223,20766,20767],{"class":2229}," readonly",[2223,20769,3001],{"class":2328},[2223,20771,10638],{"class":2334},[2223,20773,5883],{"class":2328},[2223,20775,20776,20778],{"class":2225,"line":2382},[2223,20777,17686],{"class":2334},[2223,20779,2347],{"class":2328},[2223,20781,20782,20785],{"class":2225,"line":1784},[2223,20783,20784],{"class":2334},"    decrement",[2223,20786,2347],{"class":2328},[2223,20788,20789],{"class":2225,"line":82},[2223,20790,15186],{"class":2334},[2223,20792,20793],{"class":2225,"line":1432},[2223,20794,2652],{"class":2328},[2223,20796,20797],{"class":2225,"line":369},[2223,20798,4487],{"class":2328},[12,20800,20801],{},"Use it anywhere:",[2214,20803,20805],{"className":3501,"code":20804,"language":3503,"meta":24,"style":24},"\u003Cscript setup>\nconst { count, increment, decrement } = useCounter(10)\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cdiv>\n    \u003Cp>Count: {{ count }}\u003C/p>\n    \u003Cbutton @click=\"increment\">+\u003C/button>\n    \u003Cbutton @click=\"decrement\">-\u003C/button>\n  \u003C/div>\n\u003C/template>\n",[2220,20806,20807,20817,20845,20853,20857,20865,20873,20894,20922,20950,20958],{"__ignoreMap":24},[2223,20808,20809,20811,20813,20815],{"class":2225,"line":2226},[2223,20810,3113],{"class":3510},[2223,20812,3514],{"class":3513},[2223,20814,3518],{"class":3517},[2223,20816,3530],{"class":3510},[2223,20818,20819,20821,20823,20825,20827,20829,20831,20833,20835,20837,20839,20841,20843],{"class":2225,"line":28},[2223,20820,3564],{"class":2900},[2223,20822,2874],{"class":2328},[2223,20824,10638],{"class":2904},[2223,20826,269],{"class":2328},[2223,20828,10980],{"class":2904},[2223,20830,269],{"class":2328},[2223,20832,10985],{"class":2904},[2223,20834,2880],{"class":2328},[2223,20836,3524],{"class":2908},[2223,20838,10862],{"class":2229},[2223,20840,3001],{"class":2328},[2223,20842,11072],{"class":4463},[2223,20844,4947],{"class":2328},[2223,20846,20847,20849,20851],{"class":2225,"line":25},[2223,20848,3813],{"class":3510},[2223,20850,3514],{"class":3513},[2223,20852,3530],{"class":3510},[2223,20854,20855],{"class":2225,"line":2341},[2223,20856,2616],{"emptyLinePlaceholder":33},[2223,20858,20859,20861,20863],{"class":2225,"line":336},[2223,20860,3113],{"class":3510},[2223,20862,3828],{"class":3513},[2223,20864,3530],{"class":3510},[2223,20866,20867,20869,20871],{"class":2225,"line":2357},[2223,20868,3835],{"class":3510},[2223,20870,3917],{"class":3513},[2223,20872,3530],{"class":3510},[2223,20874,20875,20877,20879,20881,20884,20886,20888,20890,20892],{"class":2225,"line":2363},[2223,20876,3845],{"class":3510},[2223,20878,12],{"class":3513},[2223,20880,4117],{"class":3510},[2223,20882,20883],{"class":2328},"Count: {{ ",[2223,20885,10638],{"class":2334},[2223,20887,4129],{"class":2328},[2223,20889,3813],{"class":3510},[2223,20891,12],{"class":3513},[2223,20893,3530],{"class":3510},[2223,20895,20896,20898,20900,20902,20904,20906,20908,20910,20912,20914,20916,20918,20920],{"class":2225,"line":2074},[2223,20897,3845],{"class":3510},[2223,20899,11833],{"class":3513},[2223,20901,11836],{"class":2328},[2223,20903,11839],{"class":3517},[2223,20905,3524],{"class":2328},[2223,20907,3944],{"class":3646},[2223,20909,10980],{"class":2334},[2223,20911,3944],{"class":3646},[2223,20913,4117],{"class":3510},[2223,20915,15440],{"class":2328},[2223,20917,3813],{"class":3510},[2223,20919,11833],{"class":3513},[2223,20921,3530],{"class":3510},[2223,20923,20924,20926,20928,20930,20932,20934,20936,20938,20940,20942,20944,20946,20948],{"class":2225,"line":43},[2223,20925,3845],{"class":3510},[2223,20927,11833],{"class":3513},[2223,20929,11836],{"class":2328},[2223,20931,11839],{"class":3517},[2223,20933,3524],{"class":2328},[2223,20935,3944],{"class":3646},[2223,20937,10985],{"class":2334},[2223,20939,3944],{"class":3646},[2223,20941,4117],{"class":3510},[2223,20943,5253],{"class":2328},[2223,20945,3813],{"class":3510},[2223,20947,11833],{"class":3513},[2223,20949,3530],{"class":3510},[2223,20951,20952,20954,20956],{"class":2225,"line":2382},[2223,20953,4208],{"class":3510},[2223,20955,3917],{"class":3513},[2223,20957,3530],{"class":3510},[2223,20959,20960,20962,20964],{"class":2225,"line":1784},[2223,20961,3813],{"class":3510},[2223,20963,3828],{"class":3513},[2223,20965,3530],{"class":3510},[16,20967,20969],{"id":20968},"essential-nuxt-modules","Essential Nuxt Modules",[12,20971,20972],{},"Extend Nuxt with official and community modules:",[116,20974,20976],{"id":20975},"tailwind-css","Tailwind CSS",[2214,20978,20980],{"className":2216,"code":20979,"language":2218,"meta":24,"style":24},"npm install @nuxtjs/tailwindcss\n",[2220,20981,20982],{"__ignoreMap":24},[2223,20983,20984,20986,20988],{"class":2225,"line":2226},[2223,20985,2253],{"class":2229},[2223,20987,2271],{"class":2233},[2223,20989,2280],{"class":2233},[12,20991,20992],{},[397,20993,2299],{},[2214,20995,20997],{"className":2303,"code":20996,"language":2305,"meta":24,"style":24},"export default defineNuxtConfig({\n  modules: ['@nuxtjs/tailwindcss']\n})\n",[2220,20998,20999,21009,21020],{"__ignoreMap":24},[2223,21000,21001,21003,21005,21007],{"class":2225,"line":2226},[2223,21002,2319],{"class":2318},[2223,21004,2322],{"class":2318},[2223,21006,2325],{"class":2229},[2223,21008,2329],{"class":2328},[2223,21010,21011,21013,21015,21018],{"class":2225,"line":28},[2223,21012,2335],{"class":2334},[2223,21014,3727],{"class":2328},[2223,21016,21017],{"class":2233},"'@nuxtjs/tailwindcss'",[2223,21019,14505],{"class":2328},[2223,21021,21022],{"class":2225,"line":25},[2223,21023,11556],{"class":2328},[116,21025,21027],{"id":21026},"nuxt-content-for-blogsdocs","Nuxt Content (for blogs/docs)",[2214,21029,21031],{"className":2216,"code":21030,"language":2218,"meta":24,"style":24},"npm install @nuxt/content\n",[2220,21032,21033],{"__ignoreMap":24},[2223,21034,21035,21037,21039],{"class":2225,"line":2226},[2223,21036,2253],{"class":2229},[2223,21038,2271],{"class":2233},[2223,21040,21041],{"class":2233}," @nuxt/content\n",[12,21043,21044],{},"Great for markdown-based content:",[2214,21046,21048],{"className":3501,"code":21047,"language":3503,"meta":24,"style":24},"\u003Cscript setup>\nconst { data: article } = await useAsyncData('article', () => \n  queryContent('/blog/my-post').findOne()\n)\n\u003C/script>\n\n\u003Ctemplate>\n  \u003CContentDoc :value=\"article\" />\n\u003C/template>\n",[2220,21049,21050,21060,21091,21106,21110,21118,21122,21130,21151],{"__ignoreMap":24},[2223,21051,21052,21054,21056,21058],{"class":2225,"line":2226},[2223,21053,3113],{"class":3510},[2223,21055,3514],{"class":3513},[2223,21057,3518],{"class":3517},[2223,21059,3530],{"class":3510},[2223,21061,21062,21064,21066,21068,21070,21072,21074,21076,21078,21080,21082,21085,21087,21089],{"class":2225,"line":28},[2223,21063,3564],{"class":2900},[2223,21065,2874],{"class":2328},[2223,21067,3610],{"class":3131},[2223,21069,3613],{"class":2328},[2223,21071,4354],{"class":2904},[2223,21073,2880],{"class":2328},[2223,21075,3524],{"class":2908},[2223,21077,3623],{"class":2318},[2223,21079,3626],{"class":2229},[2223,21081,3001],{"class":2328},[2223,21083,21084],{"class":2233},"'article'",[2223,21086,4378],{"class":2328},[2223,21088,3353],{"class":2900},[2223,21090,3765],{"class":2328},[2223,21092,21093,21095,21097,21100,21102,21104],{"class":2225,"line":25},[2223,21094,4386],{"class":2229},[2223,21096,3001],{"class":2328},[2223,21098,21099],{"class":2233},"'/blog/my-post'",[2223,21101,3707],{"class":2328},[2223,21103,4415],{"class":2229},[2223,21105,4389],{"class":2328},[2223,21107,21108],{"class":2225,"line":2341},[2223,21109,4947],{"class":2328},[2223,21111,21112,21114,21116],{"class":2225,"line":336},[2223,21113,3813],{"class":3510},[2223,21115,3514],{"class":3513},[2223,21117,3530],{"class":3510},[2223,21119,21120],{"class":2225,"line":2357},[2223,21121,2616],{"emptyLinePlaceholder":33},[2223,21123,21124,21126,21128],{"class":2225,"line":2363},[2223,21125,3113],{"class":3510},[2223,21127,3828],{"class":3513},[2223,21129,3530],{"class":3510},[2223,21131,21132,21134,21137,21139,21141,21143,21145,21147,21149],{"class":2225,"line":2074},[2223,21133,3835],{"class":3510},[2223,21135,21136],{"class":3513},"ContentDoc",[2223,21138,4762],{"class":2328},[2223,21140,3649],{"class":3517},[2223,21142,3524],{"class":2328},[2223,21144,3944],{"class":3646},[2223,21146,4354],{"class":2334},[2223,21148,3944],{"class":3646},[2223,21150,4775],{"class":3510},[2223,21152,21153,21155,21157],{"class":2225,"line":43},[2223,21154,3813],{"class":3510},[2223,21156,3828],{"class":3513},[2223,21158,3530],{"class":3510},[116,21160,21162],{"id":21161},"nuxt-image","Nuxt Image",[2214,21164,21166],{"className":2216,"code":21165,"language":2218,"meta":24,"style":24},"npm install @nuxt/image\n",[2220,21167,21168],{"__ignoreMap":24},[2223,21169,21170,21172,21174],{"class":2225,"line":2226},[2223,21171,2253],{"class":2229},[2223,21173,2271],{"class":2233},[2223,21175,21176],{"class":2233}," @nuxt/image\n",[12,21178,21179],{},"Automatic image optimization:",[2214,21181,21183],{"className":3501,"code":21182,"language":3503,"meta":24,"style":24},"\u003Ctemplate>\n  \u003CNuxtImg src=\"/photo.jpg\" width=\"400\" height=\"300\" />\n\u003C/template>\n",[2220,21184,21185,21193,21225],{"__ignoreMap":24},[2223,21186,21187,21189,21191],{"class":2225,"line":2226},[2223,21188,3113],{"class":3510},[2223,21190,3828],{"class":3513},[2223,21192,3530],{"class":3510},[2223,21194,21195,21197,21200,21202,21204,21207,21210,21212,21215,21218,21220,21223],{"class":2225,"line":28},[2223,21196,3835],{"class":3510},[2223,21198,21199],{"class":3513},"NuxtImg",[2223,21201,8687],{"class":3517},[2223,21203,3524],{"class":2328},[2223,21205,21206],{"class":2233},"\"/photo.jpg\"",[2223,21208,21209],{"class":3517}," width",[2223,21211,3524],{"class":2328},[2223,21213,21214],{"class":2233},"\"400\"",[2223,21216,21217],{"class":3517}," height",[2223,21219,3524],{"class":2328},[2223,21221,21222],{"class":2233},"\"300\"",[2223,21224,4775],{"class":3510},[2223,21226,21227,21229,21231],{"class":2225,"line":25},[2223,21228,3813],{"class":3510},[2223,21230,3828],{"class":3513},[2223,21232,3530],{"class":3510},[16,21234,21236],{"id":21235},"building-and-deploying","Building and Deploying",[116,21238,21239],{"id":373},"Development",[2214,21241,21243],{"className":2216,"code":21242,"language":2218,"meta":24,"style":24},"npm run dev\n",[2220,21244,21245],{"__ignoreMap":24},[2223,21246,21247,21249,21251],{"class":2225,"line":2226},[2223,21248,2253],{"class":2229},[2223,21250,19014],{"class":2233},[2223,21252,19017],{"class":2233},[116,21254,21256],{"id":21255},"production-build","Production Build",[2214,21258,21260],{"className":2216,"code":21259,"language":2218,"meta":24,"style":24},"npm run build\n",[2220,21261,21262],{"__ignoreMap":24},[2223,21263,21264,21266,21268],{"class":2225,"line":2226},[2223,21265,2253],{"class":2229},[2223,21267,19014],{"class":2233},[2223,21269,21270],{"class":2233}," build\n",[12,21272,21273,21274],{},"This creates an optimized build in ",[2220,21275,21276],{},".output",[116,21278,21280],{"id":21279},"preview-production-build","Preview Production Build",[2214,21282,21284],{"className":2216,"code":21283,"language":2218,"meta":24,"style":24},"npm run preview\n",[2220,21285,21286],{"__ignoreMap":24},[2223,21287,21288,21290,21292],{"class":2225,"line":2226},[2223,21289,2253],{"class":2229},[2223,21291,19014],{"class":2233},[2223,21293,21294],{"class":2233}," preview\n",[116,21296,21298],{"id":21297},"static-generation","Static Generation",[12,21300,21301],{},"For purely static sites:",[2214,21303,21305],{"className":2216,"code":21304,"language":2218,"meta":24,"style":24},"npm run generate\n",[2220,21306,21307],{"__ignoreMap":24},[2223,21308,21309,21311,21313],{"class":2225,"line":2226},[2223,21310,2253],{"class":2229},[2223,21312,19014],{"class":2233},[2223,21314,21315],{"class":2233}," generate\n",[116,21317,21319],{"id":21318},"deployment-platforms","Deployment Platforms",[12,21321,21322],{},"Nuxt works everywhere:",[12,21324,21325],{},[397,21326,21327],{},"Vercel:",[2214,21329,21331],{"className":2216,"code":21330,"language":2218,"meta":24,"style":24},"npm run build\n# Deploy with Vercel CLI or connect your git repo\n",[2220,21332,21333,21341],{"__ignoreMap":24},[2223,21334,21335,21337,21339],{"class":2225,"line":2226},[2223,21336,2253],{"class":2229},[2223,21338,19014],{"class":2233},[2223,21340,21270],{"class":2233},[2223,21342,21343],{"class":2225,"line":28},[2223,21344,21345],{"class":2312},"# Deploy with Vercel CLI or connect your git repo\n",[12,21347,21348],{},[397,21349,21350],{},"Netlify:",[2214,21352,21354],{"className":2216,"code":21353,"language":2218,"meta":24,"style":24},"npm run generate  # for static\n# or\nnpm run build     # for SSR\n",[2220,21355,21356,21368,21373],{"__ignoreMap":24},[2223,21357,21358,21360,21362,21365],{"class":2225,"line":2226},[2223,21359,2253],{"class":2229},[2223,21361,19014],{"class":2233},[2223,21363,21364],{"class":2233}," generate",[2223,21366,21367],{"class":2312},"  # for static\n",[2223,21369,21370],{"class":2225,"line":28},[2223,21371,21372],{"class":2312},"# or\n",[2223,21374,21375,21377,21379,21382],{"class":2225,"line":25},[2223,21376,2253],{"class":2229},[2223,21378,19014],{"class":2233},[2223,21380,21381],{"class":2233}," build",[2223,21383,21384],{"class":2312},"     # for SSR\n",[12,21386,21387,21390,21391],{},[397,21388,21389],{},"Cloudflare Pages:","\nAutomatic deployment from git with build command: ",[2220,21392,21393],{},"npm run build",[12,21395,21396],{},[397,21397,21398],{},"Your Own Server:",[2214,21400,21402],{"className":2216,"code":21401,"language":2218,"meta":24,"style":24},"npm run build\nnode .output/server/index.mjs\n",[2220,21403,21404,21412],{"__ignoreMap":24},[2223,21405,21406,21408,21410],{"class":2225,"line":2226},[2223,21407,2253],{"class":2229},[2223,21409,19014],{"class":2233},[2223,21411,21270],{"class":2233},[2223,21413,21414,21416],{"class":2225,"line":28},[2223,21415,18950],{"class":2229},[2223,21417,21418],{"class":2233}," .output/server/index.mjs\n",[16,21420,21421],{"id":86},"Best Practices",[116,21423,21425],{"id":21424},"_1-use-typescript","1. Use TypeScript",[12,21427,21428],{},"Enable strict mode for better type safety:",[2214,21430,21432],{"className":2303,"code":21431,"language":2305,"meta":24,"style":24},"// nuxt.config.ts\nexport default defineNuxtConfig({\n  typescript: {\n    strict: true,\n    typeCheck: true\n  }\n})\n",[2220,21433,21434,21438,21448,21455,21464,21471,21475],{"__ignoreMap":24},[2223,21435,21436],{"class":2225,"line":2226},[2223,21437,2313],{"class":2312},[2223,21439,21440,21442,21444,21446],{"class":2225,"line":28},[2223,21441,2319],{"class":2318},[2223,21443,2322],{"class":2318},[2223,21445,2325],{"class":2229},[2223,21447,2329],{"class":2328},[2223,21449,21450,21453],{"class":2225,"line":25},[2223,21451,21452],{"class":2334},"  typescript:",[2223,21454,2379],{"class":2328},[2223,21456,21457,21460,21462],{"class":2225,"line":2341},[2223,21458,21459],{"class":2334},"    strict:",[2223,21461,2547],{"class":2546},[2223,21463,2347],{"class":2328},[2223,21465,21466,21469],{"class":2225,"line":336},[2223,21467,21468],{"class":2334},"    typeCheck:",[2223,21470,11328],{"class":2546},[2223,21472,21473],{"class":2225,"line":2357},[2223,21474,2652],{"class":2328},[2223,21476,21477],{"class":2225,"line":2363},[2223,21478,11556],{"class":2328},[116,21480,21482],{"id":21481},"_2-optimize-images","2. Optimize Images",[12,21484,21485,21486,7312,21489,21492],{},"Always use ",[2220,21487,21488],{},"\u003CNuxtImg>",[2220,21490,21491],{},"\u003CNuxtPicture>"," for automatic optimization.",[116,21494,21496],{"id":21495},"_3-error-handling","3. Error Handling",[12,21498,21499],{},"Create a custom error page:",[12,21501,21502],{},[397,21503,21504],{},"error.vue",[2214,21506,21508],{"className":3501,"code":21507,"language":3503,"meta":24,"style":24},"\u003Cscript setup>\nconst props = defineProps\u003C{\n  error: {\n    statusCode: number\n    message: string\n  }\n}>()\n\nconst handleError = () => clearError({ redirect: '/' })\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cdiv>\n    \u003Ch1>{{ error.statusCode }}\u003C/h1>\n    \u003Cp>{{ error.message }}\u003C/p>\n    \u003Cbutton @click=\"handleError\">Go Home\u003C/button>\n  \u003C/div>\n\u003C/template>\n",[2220,21509,21510,21520,21532,21540,21549,21558,21562,21566,21570,21596,21604,21608,21616,21624,21649,21673,21703,21711],{"__ignoreMap":24},[2223,21511,21512,21514,21516,21518],{"class":2225,"line":2226},[2223,21513,3113],{"class":3510},[2223,21515,3514],{"class":3513},[2223,21517,3518],{"class":3517},[2223,21519,3530],{"class":3510},[2223,21521,21522,21524,21526,21528,21530],{"class":2225,"line":28},[2223,21523,3564],{"class":2900},[2223,21525,5437],{"class":2904},[2223,21527,2909],{"class":2908},[2223,21529,5442],{"class":2229},[2223,21531,19678],{"class":2328},[2223,21533,21534,21536,21538],{"class":2225,"line":25},[2223,21535,13079],{"class":3131},[2223,21537,2300],{"class":2908},[2223,21539,2379],{"class":2328},[2223,21541,21542,21545,21547],{"class":2225,"line":2341},[2223,21543,21544],{"class":3131},"    statusCode",[2223,21546,2300],{"class":2908},[2223,21548,12770],{"class":3137},[2223,21550,21551,21554,21556],{"class":2225,"line":336},[2223,21552,21553],{"class":3131},"    message",[2223,21555,2300],{"class":2908},[2223,21557,12761],{"class":3137},[2223,21559,21560],{"class":2225,"line":2357},[2223,21561,2652],{"class":2328},[2223,21563,21564],{"class":2225,"line":2363},[2223,21565,19706],{"class":2328},[2223,21567,21568],{"class":2225,"line":2074},[2223,21569,2616],{"emptyLinePlaceholder":33},[2223,21571,21572,21574,21577,21579,21581,21583,21586,21588,21591,21594],{"class":2225,"line":43},[2223,21573,3564],{"class":2900},[2223,21575,21576],{"class":2229}," handleError",[2223,21578,2909],{"class":2908},[2223,21580,3664],{"class":2328},[2223,21582,3353],{"class":2900},[2223,21584,21585],{"class":2229}," clearError",[2223,21587,4400],{"class":2328},[2223,21589,21590],{"class":2334},"redirect:",[2223,21592,21593],{"class":2233}," '/'",[2223,21595,4408],{"class":2328},[2223,21597,21598,21600,21602],{"class":2225,"line":2382},[2223,21599,3813],{"class":3510},[2223,21601,3514],{"class":3513},[2223,21603,3530],{"class":3510},[2223,21605,21606],{"class":2225,"line":1784},[2223,21607,2616],{"emptyLinePlaceholder":33},[2223,21609,21610,21612,21614],{"class":2225,"line":82},[2223,21611,3113],{"class":3510},[2223,21613,3828],{"class":3513},[2223,21615,3530],{"class":3510},[2223,21617,21618,21620,21622],{"class":2225,"line":1432},[2223,21619,3835],{"class":3510},[2223,21621,3917],{"class":3513},[2223,21623,3530],{"class":3510},[2223,21625,21626,21628,21630,21632,21634,21636,21638,21641,21643,21645,21647],{"class":2225,"line":369},[2223,21627,3845],{"class":3510},[2223,21629,3866],{"class":3513},[2223,21631,4117],{"class":3510},[2223,21633,4120],{"class":2328},[2223,21635,11391],{"class":2334},[2223,21637,260],{"class":2328},[2223,21639,21640],{"class":2334},"statusCode",[2223,21642,4129],{"class":2328},[2223,21644,3813],{"class":3510},[2223,21646,3866],{"class":3513},[2223,21648,3530],{"class":3510},[2223,21650,21651,21653,21655,21657,21659,21661,21663,21665,21667,21669,21671],{"class":2225,"line":2425},[2223,21652,3845],{"class":3510},[2223,21654,12],{"class":3513},[2223,21656,4117],{"class":3510},[2223,21658,4120],{"class":2328},[2223,21660,11391],{"class":2334},[2223,21662,260],{"class":2328},[2223,21664,20066],{"class":2334},[2223,21666,4129],{"class":2328},[2223,21668,3813],{"class":3510},[2223,21670,12],{"class":3513},[2223,21672,3530],{"class":3510},[2223,21674,21675,21677,21679,21681,21683,21685,21687,21690,21692,21694,21697,21699,21701],{"class":2225,"line":1750},[2223,21676,3845],{"class":3510},[2223,21678,11833],{"class":3513},[2223,21680,11836],{"class":2328},[2223,21682,11839],{"class":3517},[2223,21684,3524],{"class":2328},[2223,21686,3944],{"class":3646},[2223,21688,21689],{"class":2334},"handleError",[2223,21691,3944],{"class":3646},[2223,21693,4117],{"class":3510},[2223,21695,21696],{"class":2328},"Go Home",[2223,21698,3813],{"class":3510},[2223,21700,11833],{"class":3513},[2223,21702,3530],{"class":3510},[2223,21704,21705,21707,21709],{"class":2225,"line":2105},[2223,21706,4208],{"class":3510},[2223,21708,3917],{"class":3513},[2223,21710,3530],{"class":3510},[2223,21712,21713,21715,21717],{"class":2225,"line":2449},[2223,21714,3813],{"class":3510},[2223,21716,3828],{"class":3513},[2223,21718,3530],{"class":3510},[116,21720,21722],{"id":21721},"_4-seo-optimization","4. SEO Optimization",[12,21724,21725,21726,21729],{},"Use ",[2220,21727,21728],{},"useSeoMeta"," for better SEO:",[2214,21731,21733],{"className":3501,"code":21732,"language":3503,"meta":24,"style":24},"\u003Cscript setup>\nuseSeoMeta({\n  title: 'My Amazing Page',\n  description: 'This page is amazing',\n  ogImage: 'https://example.com/image.jpg',\n  twitterCard: 'summary_large_image'\n})\n\u003C/script>\n",[2220,21734,21735,21745,21751,21760,21769,21779,21787,21791],{"__ignoreMap":24},[2223,21736,21737,21739,21741,21743],{"class":2225,"line":2226},[2223,21738,3113],{"class":3510},[2223,21740,3514],{"class":3513},[2223,21742,3518],{"class":3517},[2223,21744,3530],{"class":3510},[2223,21746,21747,21749],{"class":2225,"line":28},[2223,21748,21728],{"class":2229},[2223,21750,2329],{"class":2328},[2223,21752,21753,21755,21758],{"class":2225,"line":25},[2223,21754,2924],{"class":2334},[2223,21756,21757],{"class":2233}," 'My Amazing Page'",[2223,21759,2347],{"class":2328},[2223,21761,21762,21764,21767],{"class":2225,"line":2341},[2223,21763,2939],{"class":2334},[2223,21765,21766],{"class":2233}," 'This page is amazing'",[2223,21768,2347],{"class":2328},[2223,21770,21771,21774,21777],{"class":2225,"line":336},[2223,21772,21773],{"class":2334},"  ogImage:",[2223,21775,21776],{"class":2233}," 'https://example.com/image.jpg'",[2223,21778,2347],{"class":2328},[2223,21780,21781,21784],{"class":2225,"line":2357},[2223,21782,21783],{"class":2334},"  twitterCard:",[2223,21785,21786],{"class":2233}," 'summary_large_image'\n",[2223,21788,21789],{"class":2225,"line":2363},[2223,21790,11556],{"class":2328},[2223,21792,21793,21795,21797],{"class":2225,"line":2074},[2223,21794,3813],{"class":3510},[2223,21796,3514],{"class":3513},[2223,21798,3530],{"class":3510},[116,21800,21802],{"id":21801},"_5-performance","5. Performance",[190,21804,21805,21811,21814,21820],{},[193,21806,21725,21807,21810],{},[2220,21808,21809],{},"useLazyFetch"," for non-critical data",[193,21812,21813],{},"Implement pagination for large datasets",[193,21815,21725,21816,21819],{},[2220,21817,21818],{},"\u003CClientOnly>"," for components that don't need SSR",[193,21821,21822],{},"Lazy-load images and heavy components",[16,21824,21826],{"id":21825},"common-patterns","Common Patterns",[116,21828,21830],{"id":21829},"authentication","Authentication",[2214,21832,21834],{"className":2303,"code":21833,"language":2305,"meta":24,"style":24},"// composables/useAuth.ts\nexport const useAuth = () => {\n  const user = useState('user', () => null)\n  \n  const login = async (credentials) => {\n    const data = await $fetch('/api/auth/login', {\n      method: 'POST',\n      body: credentials\n    })\n    user.value = data.user\n  }\n  \n  const logout = () => {\n    user.value = null\n  }\n  \n  return { user, login, logout }\n}\n",[2220,21835,21836,21841,21858,21881,21885,21905,21924,21934,21942,21946,21962,21966,21970,21984,21996,22000,22004,22022],{"__ignoreMap":24},[2223,21837,21838],{"class":2225,"line":2226},[2223,21839,21840],{"class":2312},"// composables/useAuth.ts\n",[2223,21842,21843,21845,21847,21850,21852,21854,21856],{"class":2225,"line":28},[2223,21844,2319],{"class":2318},[2223,21846,2901],{"class":2900},[2223,21848,21849],{"class":2229}," useAuth",[2223,21851,2909],{"class":2908},[2223,21853,3664],{"class":2328},[2223,21855,3353],{"class":2900},[2223,21857,2379],{"class":2328},[2223,21859,21860,21862,21864,21866,21869,21871,21873,21875,21877,21879],{"class":2225,"line":25},[2223,21861,5184],{"class":2900},[2223,21863,10559],{"class":2904},[2223,21865,2909],{"class":2908},[2223,21867,21868],{"class":2229}," useState",[2223,21870,3001],{"class":2328},[2223,21872,11161],{"class":2233},[2223,21874,4378],{"class":2328},[2223,21876,3353],{"class":2900},[2223,21878,5232],{"class":2546},[2223,21880,4947],{"class":2328},[2223,21882,21883],{"class":2225,"line":2341},[2223,21884,2371],{"class":2328},[2223,21886,21887,21889,21891,21893,21895,21897,21899,21901,21903],{"class":2225,"line":336},[2223,21888,5184],{"class":2900},[2223,21890,11302],{"class":2229},[2223,21892,2909],{"class":2908},[2223,21894,5164],{"class":2900},[2223,21896,3340],{"class":2328},[2223,21898,11307],{"class":3131},[2223,21900,3350],{"class":2328},[2223,21902,3353],{"class":2900},[2223,21904,2379],{"class":2328},[2223,21906,21907,21909,21911,21913,21915,21917,21919,21922],{"class":2225,"line":2357},[2223,21908,3673],{"class":2900},[2223,21910,13178],{"class":2904},[2223,21912,2909],{"class":2908},[2223,21914,3623],{"class":2318},[2223,21916,20242],{"class":2229},[2223,21918,3001],{"class":2328},[2223,21920,21921],{"class":2233},"'/api/auth/login'",[2223,21923,17940],{"class":2328},[2223,21925,21926,21929,21932],{"class":2225,"line":2363},[2223,21927,21928],{"class":2334},"      method:",[2223,21930,21931],{"class":2233}," 'POST'",[2223,21933,2347],{"class":2328},[2223,21935,21936,21939],{"class":2225,"line":2074},[2223,21937,21938],{"class":2334},"      body:",[2223,21940,21941],{"class":2334}," credentials\n",[2223,21943,21944],{"class":2225,"line":43},[2223,21945,17986],{"class":2328},[2223,21947,21948,21950,21952,21954,21956,21958,21960],{"class":2225,"line":2382},[2223,21949,11471],{"class":2334},[2223,21951,260],{"class":2328},[2223,21953,3649],{"class":2334},[2223,21955,2909],{"class":2908},[2223,21957,13178],{"class":2334},[2223,21959,260],{"class":2328},[2223,21961,11378],{"class":2334},[2223,21963,21964],{"class":2225,"line":1784},[2223,21965,2652],{"class":2328},[2223,21967,21968],{"class":2225,"line":82},[2223,21969,2371],{"class":2328},[2223,21971,21972,21974,21976,21978,21980,21982],{"class":2225,"line":1432},[2223,21973,5184],{"class":2900},[2223,21975,11464],{"class":2229},[2223,21977,2909],{"class":2908},[2223,21979,3664],{"class":2328},[2223,21981,3353],{"class":2900},[2223,21983,2379],{"class":2328},[2223,21985,21986,21988,21990,21992,21994],{"class":2225,"line":369},[2223,21987,11471],{"class":2334},[2223,21989,260],{"class":2328},[2223,21991,3649],{"class":2334},[2223,21993,2909],{"class":2908},[2223,21995,11480],{"class":2546},[2223,21997,21998],{"class":2225,"line":2425},[2223,21999,2652],{"class":2328},[2223,22001,22002],{"class":2225,"line":1750},[2223,22003,2371],{"class":2328},[2223,22005,22006,22008,22010,22012,22014,22016,22018,22020],{"class":2225,"line":2105},[2223,22007,3360],{"class":2318},[2223,22009,2874],{"class":2328},[2223,22011,10730],{"class":2334},[2223,22013,269],{"class":2328},[2223,22015,11354],{"class":2334},[2223,22017,269],{"class":2328},[2223,22019,11684],{"class":2334},[2223,22021,18085],{"class":2328},[2223,22023,22024],{"class":2225,"line":2449},[2223,22025,4487],{"class":2328},[116,22027,22029],{"id":22028},"protected-routes","Protected Routes",[2214,22031,22033],{"className":2303,"code":22032,"language":2305,"meta":24,"style":24},"// middleware/auth.ts\nexport default defineNuxtRouteMiddleware((to, from) => {\n  const { user } = useAuth()\n  \n  if (!user.value) {\n    return navigateTo('/login')\n  }\n})\n",[2220,22034,22035,22040,22063,22079,22083,22099,22113,22117],{"__ignoreMap":24},[2223,22036,22037],{"class":2225,"line":2226},[2223,22038,22039],{"class":2312},"// middleware/auth.ts\n",[2223,22041,22042,22044,22046,22049,22051,22053,22055,22057,22059,22061],{"class":2225,"line":28},[2223,22043,2319],{"class":2318},[2223,22045,2322],{"class":2318},[2223,22047,22048],{"class":2229}," defineNuxtRouteMiddleware",[2223,22050,16619],{"class":2328},[2223,22052,3982],{"class":3131},[2223,22054,269],{"class":2328},[2223,22056,2883],{"class":3131},[2223,22058,3350],{"class":2328},[2223,22060,3353],{"class":2900},[2223,22062,2379],{"class":2328},[2223,22064,22065,22067,22069,22071,22073,22075,22077],{"class":2225,"line":25},[2223,22066,5184],{"class":2900},[2223,22068,2874],{"class":2328},[2223,22070,10730],{"class":2904},[2223,22072,2880],{"class":2328},[2223,22074,3524],{"class":2908},[2223,22076,21849],{"class":2229},[2223,22078,4389],{"class":2328},[2223,22080,22081],{"class":2225,"line":2341},[2223,22082,2371],{"class":2328},[2223,22084,22085,22087,22089,22091,22093,22095,22097],{"class":2225,"line":336},[2223,22086,15582],{"class":2318},[2223,22088,3340],{"class":2328},[2223,22090,4435],{"class":2908},[2223,22092,10730],{"class":2334},[2223,22094,260],{"class":2328},[2223,22096,3649],{"class":2334},[2223,22098,4444],{"class":2328},[2223,22100,22101,22103,22106,22108,22111],{"class":2225,"line":2357},[2223,22102,3696],{"class":2318},[2223,22104,22105],{"class":2229}," navigateTo",[2223,22107,3001],{"class":2328},[2223,22109,22110],{"class":2233},"'/login'",[2223,22112,4947],{"class":2328},[2223,22114,22115],{"class":2225,"line":2363},[2223,22116,2652],{"class":2328},[2223,22118,22119],{"class":2225,"line":2074},[2223,22120,11556],{"class":2328},[12,22122,22123],{},"Use in a page:",[2214,22125,22127],{"className":3501,"code":22126,"language":3503,"meta":24,"style":24},"\u003Cscript setup>\ndefinePageMeta({\n  middleware: 'auth'\n})\n\u003C/script>\n",[2220,22128,22129,22139,22145,22153,22157],{"__ignoreMap":24},[2223,22130,22131,22133,22135,22137],{"class":2225,"line":2226},[2223,22132,3113],{"class":3510},[2223,22134,3514],{"class":3513},[2223,22136,3518],{"class":3517},[2223,22138,3530],{"class":3510},[2223,22140,22141,22143],{"class":2225,"line":28},[2223,22142,19076],{"class":2229},[2223,22144,2329],{"class":2328},[2223,22146,22147,22150],{"class":2225,"line":25},[2223,22148,22149],{"class":2334},"  middleware:",[2223,22151,22152],{"class":2233}," 'auth'\n",[2223,22154,22155],{"class":2225,"line":2341},[2223,22156,11556],{"class":2328},[2223,22158,22159,22161,22163],{"class":2225,"line":336},[2223,22160,3813],{"class":3510},[2223,22162,3514],{"class":3513},[2223,22164,3530],{"class":3510},[16,22166,22168],{"id":22167},"troubleshooting","Troubleshooting",[12,22170,22171],{},[397,22172,22173],{},"Port Already in Use:",[2214,22175,22177],{"className":2216,"code":22176,"language":2218,"meta":24,"style":24},"npm run dev -- --port 3001\n",[2220,22178,22179],{"__ignoreMap":24},[2223,22180,22181,22183,22185,22188,22191,22194],{"class":2225,"line":2226},[2223,22182,2253],{"class":2229},[2223,22184,19014],{"class":2233},[2223,22186,22187],{"class":2233}," dev",[2223,22189,22190],{"class":2546}," --",[2223,22192,22193],{"class":2546}," --port",[2223,22195,22196],{"class":4463}," 3001\n",[12,22198,22199],{},[397,22200,22201],{},"Clear Nuxt Cache:",[2214,22203,22205],{"className":2216,"code":22204,"language":2218,"meta":24,"style":24},"rm -rf .nuxt\nnpm run dev\n",[2220,22206,22207,22218],{"__ignoreMap":24},[2223,22208,22209,22212,22215],{"class":2225,"line":2226},[2223,22210,22211],{"class":2229},"rm",[2223,22213,22214],{"class":2546}," -rf",[2223,22216,22217],{"class":2233}," .nuxt\n",[2223,22219,22220,22222,22224],{"class":2225,"line":28},[2223,22221,2253],{"class":2229},[2223,22223,19014],{"class":2233},[2223,22225,19017],{"class":2233},[12,22227,22228],{},[397,22229,22230],{},"TypeScript Errors:",[2214,22232,22234],{"className":2216,"code":22233,"language":2218,"meta":24,"style":24},"npm run postinstall  # Regenerates types\n",[2220,22235,22236],{"__ignoreMap":24},[2223,22237,22238,22240,22242,22245],{"class":2225,"line":2226},[2223,22239,2253],{"class":2229},[2223,22241,19014],{"class":2233},[2223,22243,22244],{"class":2233}," postinstall",[2223,22246,22247],{"class":2312},"  # Regenerates types\n",[16,22249,22251],{"id":22250},"whats-new-in-nuxt-4","What's New in Nuxt 4?",[12,22253,22254],{},"Nuxt 4 (currently in development) brings exciting improvements:",[190,22256,22257,22260,22263,22266,22269],{},[193,22258,22259],{},"Better performance with optimized server rendering",[193,22261,22262],{},"Enhanced TypeScript support",[193,22264,22265],{},"Improved developer experience",[193,22267,22268],{},"Smaller bundle sizes",[193,22270,22271],{},"Better compatibility with the latest Vue features",[12,22273,22274],{},"To prepare for Nuxt 4, keep your Nuxt 3 projects updated and follow migration guides when Nuxt 4 is released.",[16,22276,22278],{"id":22277},"next-steps","Next Steps",[12,22280,22281],{},"Now that you understand the basics:",[675,22283,22284,22290,22302,22314,22329],{},[193,22285,22286,22289],{},[397,22287,22288],{},"Build a project",": Start with a simple blog or portfolio",[193,22291,22292,22295,22296,22301],{},[397,22293,22294],{},"Explore modules",": Check out the ",[173,22297,22300],{"href":22298,"rel":22299},"https://nuxt.com/modules",[177],"Nuxt Modules"," directory",[193,22303,22304,22307,22308,22313],{},[397,22305,22306],{},"Read the docs",": The ",[173,22309,22312],{"href":22310,"rel":22311},"https://nuxt.com",[177],"official documentation"," is excellent",[193,22315,22316,3613,22319,269,22324],{},[397,22317,22318],{},"Join the community",[173,22320,22323],{"href":22321,"rel":22322},"https://discord.com/invite/nuxt",[177],"Discord",[173,22325,22328],{"href":22326,"rel":22327},"https://github.com/nuxt/nuxt/discussions",[177],"GitHub Discussions",[193,22330,22331,22334],{},[397,22332,22333],{},"Watch tutorials",": Many great video tutorials are available",[16,22336,301],{"id":300},[12,22338,22339],{},"Nuxt makes building modern web applications enjoyable and productive. Its opinionated structure, powerful features, and excellent developer experience make it a top choice for Vue developers.",[12,22341,22342],{},"Start small, experiment with features, and gradually build more complex applications. The best way to learn Nuxt is by building with it!",[12,22344,6640],{},[6642,22346,22347],{},"html pre.shiki code .s56mj, html code.shiki .s56mj{--shiki-light:#6A737D;--shiki-default:#6A9955;--shiki-dark:#6A9955}html pre.shiki code .sffyN, html code.shiki .sffyN{--shiki-light:#24292E;--shiki-default:#808080;--shiki-dark:#808080}html pre.shiki code .ssFZ1, html code.shiki .ssFZ1{--shiki-light:#22863A;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .sFcZJ, html code.shiki .sFcZJ{--shiki-light:#6F42C1;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .s5uUr, html code.shiki .s5uUr{--shiki-light:#D73A49;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .sToQf, html code.shiki .sToQf{--shiki-light:#005CC5;--shiki-default:#4FC1FF;--shiki-dark:#4FC1FF}html pre.shiki code .s1p9p, html code.shiki .s1p9p{--shiki-light:#D73A49;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .svuFb, html code.shiki .svuFb{--shiki-light:#6F42C1;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}html pre.shiki code .sG4b4, html code.shiki .sG4b4{--shiki-light:#24292E;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .seC34, html code.shiki .seC34{--shiki-light:#005CC5;--shiki-default:#B5CEA8;--shiki-dark:#B5CEA8}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 .s7v1m, html code.shiki .s7v1m{--shiki-light:#005CC5;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .sGDl4, html code.shiki .sGDl4{--shiki-light:#032F62;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .sNX3-, html code.shiki .sNX3-{--shiki-light:#005CC5;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}html pre.shiki code .sZiGn, html code.shiki .sZiGn{--shiki-light:#24292E;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .s9TRk, html code.shiki .s9TRk{--shiki-light:#E36209;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .sEkCa, html code.shiki .sEkCa{--shiki-light:#D73A49;--shiki-default:#C586C0;--shiki-dark:#C586C0}html pre.shiki code .se2iQ, html code.shiki .se2iQ{--shiki-light:#032F62;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .s5T4v, html code.shiki .s5T4v{--shiki-light:#032F62;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .sUwQ0, html code.shiki .sUwQ0{--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-default:#F44747;--shiki-default-font-style:inherit;--shiki-dark:#F44747;--shiki-dark-font-style:inherit}html pre.shiki code .s6-XD, html code.shiki .s6-XD{--shiki-light:#005CC5;--shiki-default:#4EC9B0;--shiki-dark:#4EC9B0}html pre.shiki code .sO3gw, html code.shiki .sO3gw{--shiki-light:#6F42C1;--shiki-default:#D7BA7D;--shiki-dark:#D7BA7D}html pre.shiki code .sps74, html code.shiki .sps74{--shiki-light:#005CC5;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .sqBZk, html code.shiki .sqBZk{--shiki-light:#005CC5;--shiki-default:#CE9178;--shiki-dark:#CE9178}",{"title":24,"searchDepth":25,"depth":25,"links":22349},[22350,22353,22358,22366,22371,22378,22385,22389,22390,22391,22392],{"id":18767,"depth":28,"text":18768,"children":22351},[22352],{"id":18774,"depth":25,"text":18775},{"id":18932,"depth":28,"text":18933,"children":22354},[22355,22356,22357],{"id":18936,"depth":25,"text":18937},{"id":18956,"depth":25,"text":18957},{"id":19027,"depth":25,"text":19028},{"id":19040,"depth":28,"text":19041,"children":22359},[22360,22361,22362,22363,22364,22365],{"id":19044,"depth":25,"text":19045},{"id":19373,"depth":25,"text":19374},{"id":19643,"depth":25,"text":19644},{"id":19916,"depth":25,"text":19917},{"id":20353,"depth":25,"text":20354},{"id":20627,"depth":25,"text":20628},{"id":20968,"depth":28,"text":20969,"children":22367},[22368,22369,22370],{"id":20975,"depth":25,"text":20976},{"id":21026,"depth":25,"text":21027},{"id":21161,"depth":25,"text":21162},{"id":21235,"depth":28,"text":21236,"children":22372},[22373,22374,22375,22376,22377],{"id":373,"depth":25,"text":21239},{"id":21255,"depth":25,"text":21256},{"id":21279,"depth":25,"text":21280},{"id":21297,"depth":25,"text":21298},{"id":21318,"depth":25,"text":21319},{"id":86,"depth":28,"text":21421,"children":22379},[22380,22381,22382,22383,22384],{"id":21424,"depth":25,"text":21425},{"id":21481,"depth":25,"text":21482},{"id":21495,"depth":25,"text":21496},{"id":21721,"depth":25,"text":21722},{"id":21801,"depth":25,"text":21802},{"id":21825,"depth":28,"text":21826,"children":22386},[22387,22388],{"id":21829,"depth":25,"text":21830},{"id":22028,"depth":25,"text":22029},{"id":22167,"depth":28,"text":22168},{"id":22250,"depth":28,"text":22251},{"id":22277,"depth":28,"text":22278},{"id":300,"depth":28,"text":301},"Learn how to build fast, modern web applications with Nuxt 3 and Nuxt 4. A comprehensive guide covering setup, key features, best practices, and real-world examples.","https://images.unsplash.com/photo-1559028012-481c04fa702d?q=80&w=1200",{"excerpt":22396},{"type":9,"value":22397},[22398,22400,22402,22404],[12,22399,18761],{},[12,22401,18764],{},[16,22403,18768],{"id":18767},[12,22405,18771],{},"/getting-started-nuxt3","2024-05-01",{"title":18756,"description":22393},"getting-started-nuxt3",[6688,3503,1930,2305,2078,22411],"ssr","souZ7oFFLLurxVS0EDebSj02P4JvmYPLRE5-6EpVoCQ",{"id":22414,"title":22415,"author":7,"body":22416,"category":373,"description":22511,"extension":31,"image":22512,"isDraft":34,"isFeatured":34,"locale":35,"meta":22513,"navigation":33,"path":22525,"publishedAt":22526,"readingTime":2363,"seo":22527,"stem":22514,"tags":22528,"updatedAt":2080,"__hash__":22529},"articles_en/how-long-does-it-take-to-learn-javascript.md","How Long Does it Take to Learn JavaScript?",{"type":9,"value":22417,"toc":22504},[22418,22424,22427,22431,22434,22437,22440,22443,22447,22450,22453,22456,22459,22462,22466,22469,22472,22475,22478,22482,22485,22496,22499,22501],[12,22419,22420,22421,22423],{},"Learning a programming language can be a daunting task, and it's natural to wonder how long it will take before you feel comfortable and proficient. JavaScript is a popular and versatile language that is widely used for web development, and it's a useful skill to have in your toolkit.",[228,22422],{},"\nIn this article, we'll break down the various factors that can influence how long it takes to learn JavaScript and provide some tips on how to speed up the learning process.",[12,22425,22426],{},"There are several factors that can impact how quickly you learn JavaScript, including your previous programming experience, how much time you're able to devote to learning, and your natural aptitude for coding. In this article, we'll explore these factors in more detail and provide some estimates for how long it might take to learn JavaScript based on different learning paths.",[16,22428,22430],{"id":22429},"previous-programming-experience","Previous Programming Experience",[12,22432,22433],{},"If you have no previous programming experience, learning JavaScript (or any other programming language) will likely take longer than if you already have some familiarity with coding concepts. That being said, learning JavaScript is a great way to get started with programming, as it's a relatively easy language to learn and has a large and active community of developers who can provide support and guidance.",[12,22435,22436],{},"If you do have some programming experience, it will likely take you less time to learn JavaScript. Depending on the language(s) you already know and the level of familiarity you have with programming concepts, it might only take a few weeks or a couple of months to feel comfortable with JavaScript.",[12,22438,22439],{},"It's worth noting that the type of programming language you already know can also affect how quickly you learn JavaScript. If you already know a similar language such as C++ or Java, you may find that many of the concepts and syntax are familiar, which can make learning JavaScript easier. On the other hand, if you're coming from a completely different type of languages, such as Python or Ruby, you may need to spend more time adjusting to the syntax and structure of JavaScript.",[12,22441,22442],{},"Overall, having previous programming experience can definitely help speed up the learning process for JavaScript, but it's not a requirement. With dedication and hard work, anyone can learn to code, regardless of their background or previous experience.",[16,22444,22446],{"id":22445},"time-devoted-to-learning","Time Devoted to Learning",[12,22448,22449],{},"The amount of time you're able to devote to learning JavaScript will also have a significant impact on how quickly you learn the language. The more time you can spend learning and practice, the faster you'll make progress.",[12,22451,22452],{},"If you're able to set aside several hours each day to focus on learning JavaScript, you'll make faster progress than if you can only devote a few hours per week. This is because learning a programming language requires a lot of repetition and practice to truly understand and internalize the concepts. The more time you can spend working with the language, the more comfortable you'll become with it.",[12,22454,22455],{},"It's also important to be consistent in your learning. Setting aside dedicated study time on a regular basis will be more effective than sporadic bursts of activity. Aim to learn and practice JavaScript at least a few times per week, and try to make it a habit. This will help you stay focused and motivated, and it will make it easier to retain the material you're learning.",[12,22457,22458],{},"In addition to the quantity of time you spend learning, the quality of your study time is also important. Simply reading about or watching videos on JavaScript is not enough to truly understand and master the language. You need to actively engage with the material and practice what you're learning. This could mean working through coding challenges, building small projects, or collaborating with other developers.",[12,22460,22461],{},"The more time you're able to devote to learning JavaScript, the faster you'll make progress. However, it's also important to make sure you're actively engaged in the learning process and making the most of your study time.",[16,22463,22465],{"id":22464},"natural-aptitude-for-coding","Natural Aptitude for Coding",[12,22467,22468],{},"While anyone can learn to code with dedication and hard work, it's true that some people seem to have a natural aptitude for programming. If you're someone who enjoys problem-solving, logical thinking and working with computers, you may find that learning JavaScript (and other programming languages) comes more easily to you.",[12,22470,22471],{},"On the other hand, if you struggle with these types of tasks or don't enjoy working with computers, you may find learning JavaScript more challenging. That being said, it's important to remember that programming is a skill that can be learned and developed with practice, even if you don't have a natural aptitude for it.",[12,22473,22474],{},"If you're not sure if you have a natural aptitude for coding, there are a few things you can try to get a better sense of whether or not it's something you'd enjoy. For example, you could try working through some coding challenges or building small projects with a language like Scratch or Python. This will give you a taste of what programming is like and help you decide if it's something you're interested in pursuing further.",[12,22476,22477],{},"Ultimately, whether or not you have a natural aptitude for coding shouldn't be a deciding factor in whether or not you learn JavaScript. With dedication and hard work, anyone can learn to code, regardless of their natural aptitude. So, it's better to give it a try and see if it's something you enjoy and are good at, rather than assuming you won't be able to learn it based on your perceived aptitude.",[16,22479,22481],{"id":22480},"estimating-how-long-it-will-take-to-learn-javascript","Estimating How Long It Will Take to Learn JavaScript",[12,22483,22484],{},"Given the variables at play, it's difficult to provide a precise estimate for how long it will take you to learn JavaScript. However, here are some rough estimates based on different learning paths:",[190,22486,22487,22490,22493],{},[193,22488,22489],{},"If you have no programming experience and are able to devote several hours per day to learning JavaScript, it could take you anywhere from three to six months to feel comfortable with the language. This estimate assumes you're learning consistently and actively engaging with the material.",[193,22491,22492],{},"If you have some programming experience and can devote several hours per day to learning JavaScript, it might take you one to three months to feel comfortable with the language. This estimate assumes you already have a basic understanding of programming concepts and are able to focus on learning more advanced JavaScript concepts and techniques.",[193,22494,22495],{},"If you have a lot of programming experience and can devote several hours per day to learning JavaScript, it might take you just a few weeks to feel comfortable with the language. This estimate assumes you already have a strong foundation in programming and are able to pick up new languages quickly.",[12,22497,22498],{},"It's important to keep in mind that these are just rough estimates and your actual learning journey may be shorter or longer depending on your individual circumstances. The most important thing is to stay focused, consistent, and patient as you learn JavaScript.",[16,22500,301],{"id":300},[12,22502,22503],{},"Learning JavaScript (or any programming language) takes time and effort, is an ongoing process. While you may reach a point where you feel comfortable with the language and are able to build basic projects, there will always be more to learn and new techniques to master. Don't be discouraged if it takes you longer than these estimates to feel comfortable with JavaScript, and remember that learning is a journey, not a destination. The most important thing is to keep learning and growing as a developer.",{"title":24,"searchDepth":25,"depth":25,"links":22505},[22506,22507,22508,22509,22510],{"id":22429,"depth":28,"text":22430},{"id":22445,"depth":28,"text":22446},{"id":22464,"depth":28,"text":22465},{"id":22480,"depth":28,"text":22481},{"id":300,"depth":28,"text":301},"Learning a programming language can be a daunting task, and it's natural to wonder how long it will take before you feel comfortable and proficient. JavaScript is a popular and versatile language that is widely used for web development, and it's a useful skill to have in your toolkit","https://images.unsplash.com/photo-1550063873-ab792950096b?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDV8fGphdmFzY3JpcHR8ZW58MHx8fHwxNjcxMTUyNjAy&ixlib=rb-4.0.3&q=80&w=2000",{"slug":22514,"excerpt":22515},"how-long-does-it-take-to-learn-javascript",{"type":9,"value":22516},[22517,22521,22523],[12,22518,22420,22519,22423],{},[228,22520],{},[12,22522,22426],{},[16,22524,22430],{"id":22429},"/how-long-does-it-take-to-learn-javascript","2022-12-18T09:29:37.000Z",{"title":22415,"description":22511},[1917,1930,2077,2023,340,341,2078,342],"OiVL6QbtjFQXwpjZ1K6NAUFWvMO-nioF4_fcAIOD4Ws",{"id":22531,"title":22532,"author":7,"body":22533,"category":373,"description":22537,"extension":31,"image":22692,"isDraft":34,"isFeatured":34,"locale":35,"meta":22693,"navigation":33,"path":22701,"publishedAt":22702,"readingTime":336,"seo":22703,"stem":22694,"tags":22704,"updatedAt":2080,"__hash__":22705},"articles_en/how-long-does-it-take-to-learn-python.md","How Long Does it Take to Learn Python?",{"type":9,"value":22534,"toc":22680},[22535,22538,22541,22545,22548,22574,22578,22581,22595,22598,22602,22605,22609,22612,22615,22641,22645,22648,22652,22655,22658,22662,22665,22669,22672,22675,22677],[12,22536,22537],{},"Learning to program can be a challenging but rewarding experience. One of the most popular programming languages to learn is Python, due to its simplicity, versatility, and widespread use in a variety of industries. So, how long does it take to learn Python?",[12,22539,22540],{},"The answer depends on several factors, including your prior programming experience, the amount of time you can devote to learning, and your learning style. In this article, we'll explore these factors in more detail and provide some estimates for how long it might take to learn Python.",[16,22542,22544],{"id":22543},"factors-that-affect-how-long-it-takes-to-learn-python","Factors that Affect How Long it Takes to Learn Python",[12,22546,22547],{},"There are several factors that can influence how long it takes to learn Python, including:",[675,22549,22550,22556,22562,22568],{},[193,22551,22552,22555],{},[397,22553,22554],{},"Prior programming experience",": If you have prior programming experience, especially in a similar language like Java or C++, it will likely take you less time to learn Python. On the other hand, if you are new to programming, it may take you longer to learn Python and get comfortable with the basics of programming.",[193,22557,22558,22561],{},[397,22559,22560],{},"Amount of time dedicated to learning",": Like any skill, the more time you dedicate to learning Python, the faster you will progress. If you can devote several hours a day to learning, you will likely progress faster than if you only have an hour or two a week to devote to learning.",[193,22563,22564,22567],{},[397,22565,22566],{},"Learning style",": Some people may learn faster through visual learning, while others may prefer hands-on exercises or reading. Identifying your preferred learning style can help you choose the best resources and methods for learning Python.",[193,22569,22570,22573],{},[397,22571,22572],{},"Goals for learning Python",": What you want to use Python for will also impact how long it takes you to learn. If you want to use Python for data analysis, for example, you will need to learn about data manipulation and visualization libraries like Pandas and Matplotlib, which will require additional time.",[16,22575,22577],{"id":22576},"how-long-does-it-take-to-learn-python-estimates","How Long Does it Take to Learn Python: Estimates",[12,22579,22580],{},"With these factors in mind, it's difficult to provide a precise estimate of how long it will take you to learn Python. However, here are some rough estimates based on the factors discussed above:",[190,22582,22583,22586,22589,22592],{},[193,22584,22585],{},"If you are new to programming and can dedicate several hours a day to learning, it may take you 3-6 months to learn Python.",[193,22587,22588],{},"If you have some prior programming experience and can dedicate several hours a day to learning, it may take you 1-3 months to learn Python.",[193,22590,22591],{},"If you are new to programming but can only dedicate an hour or two a week to learning, it may take you 6-12 months to learn Python.",[193,22593,22594],{},"If you have some prior programming experience and can only dedicate an hour or two a week to learning, it may take you 3-6 months to learn Python.",[12,22596,22597],{},"Keep in mind that these estimates are rough and will vary depending on your individual learning style and goals for using Python.",[16,22599,22601],{"id":22600},"steps-to-take-to-learn-python","Steps to Take to Learn Python",[12,22603,22604],{},"Now that we've explored some rough estimates for how long it might take you to learn Python, let's consider the steps you can take to start learning. Here are some steps to take as you begin your journey to learn Python:",[116,22606,22608],{"id":22607},"_1-choose-a-learning-resource","1. Choose a Learning Resource",[12,22610,22611],{},"There are many resources available for learning Python, including online courses, books, and tutorials. When choosing a resource, consider your learning style and goals. Do you prefer visual learning, or do you prefer hands-on exercises? Do you want to learn Python for data analysis, web development, or something else? Answering these questions can help you choose a resource that is best suited to your needs.",[12,22613,22614],{},"Some popular options for learning Python include:",[190,22616,22617,22625,22633],{},[193,22618,22619,22624],{},[173,22620,22623],{"href":22621,"rel":22622},"https://www.codecademy.com/learn/learn-python",[177],"Codecademy"," - an interactive online course with exercises and projects",[193,22626,22627,22632],{},[173,22628,22631],{"href":22629,"rel":22630},"https://www.learnpython.org/",[177],"LearnPython.org"," - a free tutorial with exercises and quizzes",[193,22634,22635,22640],{},[173,22636,22639],{"href":22637,"rel":22638},"https://www.coursera.org/specializations/python",[177],"Python for Everybody"," - a series of online courses on Python for data manipulation, visualization, and web development",[116,22642,22644],{"id":22643},"_2-start-with-the-basics","2. Start with the Basics",[12,22646,22647],{},"Before diving into more advanced topics, it's important to build a strong foundation in the basics of Python. This includes learning about data types, variables, loops, and control structures. Make sure to take the time to understand these concepts thoroughly, as they will form the foundation of your programming skills.",[116,22649,22651],{"id":22650},"_3-practice-practice-practice","3. Practice, Practice, Practice",[12,22653,22654],{},"The best way to learn Python is by actively using it. As you work through tutorials and exercises, try to apply what you've learned to your own projects. This will help you solidify your understanding and build your skills.",[12,22656,22657],{},"Consider setting aside dedicated time each day or week to practice coding in Python. You can also join online communities, such as forums or Discord channels, where you can ask for help and get feedback on your work from more experienced programmers.",[116,22659,22661],{"id":22660},"_4-seek-help-when-needed","4. Seek Help When Needed",[12,22663,22664],{},"Don't be afraid to ask for help if you get stuck or have questions. There are many resources available for getting help with Python, including online communities, forums, and Stack Overflow. Don't be afraid to reach out for assistance when you need it – everyone has to start somewhere, and there are many experienced programmers who are willing to help out those who are just starting out.",[116,22666,22668],{"id":22667},"_5-keep-learning-and-expanding-your-skills","5. Keep Learning and Expanding Your Skills",[12,22670,22671],{},"Once you've learned the basics of Python, there is still much more to learn. Consider exploring new libraries and frameworks, or diving into more advanced topics like machine learning or web development.",[12,22673,22674],{},"Keep an open mind and be willing to try new things. The more you learn and practice, the more proficient you will become in Python.",[16,22676,301],{"id":300},[12,22678,22679],{},"In conclusion, how long it takes to learn Python will depend on your prior programming experience, the amount of time you can dedicate to learning, and your learning style. With dedication and practice, most people can learn Python within a few months to a year. By following a structured learning plan and seeking help when needed, you can set yourself up for success as you learn this powerful programming language.",{"title":24,"searchDepth":25,"depth":25,"links":22681},[22682,22683,22684,22691],{"id":22543,"depth":28,"text":22544},{"id":22576,"depth":28,"text":22577},{"id":22600,"depth":28,"text":22601,"children":22685},[22686,22687,22688,22689,22690],{"id":22607,"depth":25,"text":22608},{"id":22643,"depth":25,"text":22644},{"id":22650,"depth":25,"text":22651},{"id":22660,"depth":25,"text":22661},{"id":22667,"depth":25,"text":22668},{"id":300,"depth":28,"text":301},"https://images.unsplash.com/photo-1515879218367-8466d910aaa4?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDJ8fHB5dGhvbnxlbnwwfHx8fDE2NzExNTE1NTM&ixlib=rb-4.0.3&q=80&w=2000",{"slug":22694,"excerpt":22695},"how-long-does-it-take-to-learn-python",{"type":9,"value":22696},[22697,22699],[12,22698,22537],{},[12,22700,22540],{},"/how-long-does-it-take-to-learn-python","2022-12-17T13:06:39.000Z",{"title":22532,"description":22537},[1917,1943,2077,340,341,2078,342],"hrRjMGTeqRPC-hW6RkwFwA_UUyz4QScLXfn2ZQg4s5c",{"id":22707,"title":22708,"author":7,"body":22709,"category":2127,"description":22717,"extension":31,"image":22878,"isDraft":34,"isFeatured":34,"locale":35,"meta":22879,"navigation":33,"path":22887,"publishedAt":22888,"readingTime":336,"seo":22889,"stem":22880,"tags":22890,"updatedAt":22891,"__hash__":22892},"articles_en/how-to-become-a-product-manager-methodologies-and-courses-to-take.md","How to Become a Product Manager: Methodologies and Courses to Take",{"type":9,"value":22710,"toc":22867},[22711,22715,22718,22721,22725,22728,22731,22734,22738,22741,22744,22747,22751,22754,22757,22760,22764,22767,22770,22774,22777,22780,22784,22787,22790,22793,22825,22829,22832,22864],[16,22712,22714],{"id":22713},"what-is-product-management","What is Product Management?",[12,22716,22717],{},"Product management is the process of developing and bringing a product to market.",[12,22719,22720],{},"It involves a wide range of responsibilities, including defining the product vision and strategy, conducting market research, gathering and prioritizing product requirements, and working closely with cross-functional teams such as engineering, design, and marketing to ensure the product meets the needs of customers and the goals of the organization.",[16,22722,22724],{"id":22723},"the-role-of-product-management","The Role of Product Management",[12,22726,22727],{},"Product managers are responsible for the overall success of a product.",[12,22729,22730],{},"They are the ones who are responsible for defining the product vision, conducting market research, gathering and prioritizing product requirements, and working closely with cross-functional teams to bring the product to market.",[12,22732,22733],{},"They also work to ensure that the product meets the needs of customers and the goals of the organization.",[16,22735,22737],{"id":22736},"product-management-methodologies","Product Management Methodologies",[12,22739,22740],{},"One of the most important methodologies for product managers to understand is the Agile framework.",[12,22742,22743],{},"Agile is a flexible, iterative approach to product development that emphasizes collaboration, customer feedback, and continuous improvement.",[12,22745,22746],{},"Agile methodologies such as Scrum, Kanban, and Lean are widely used in the software development industry and are becoming increasingly popular in other industries as well.",[116,22748,22750],{"id":22749},"scrum","Scrum",[12,22752,22753],{},"Scrum, in particular, is a widely used Agile framework that is particularly well-suited for product development.",[12,22755,22756],{},"It is a framework for managing and completing complex projects, and it provides a clear structure for product managers to work with.",[12,22758,22759],{},"Scrum includes roles such as the Product Owner, Scrum Master, and Development Team, as well as ceremonies such as Sprint Planning, Daily Scrums, Sprint Reviews, and Sprint Retrospectives.",[116,22761,22763],{"id":22762},"kanban","Kanban",[12,22765,22766],{},"Another Agile methodology that product managers should be familiar with is Kanban. Kanban is a visual system for managing work and is often used in manufacturing and software development.",[12,22768,22769],{},"It helps teams to visualize their workflow and identify bottlenecks in order to improve efficiency.",[116,22771,22773],{"id":22772},"lean","Lean",[12,22775,22776],{},"Lean is a methodology that emphasizes efficiency, waste reduction, and continuous improvement.",[12,22778,22779],{},"It is often used in manufacturing and software development but also in other fields. Lean methodologies include practices such as value stream mapping, flow, pull systems, and visual management.",[16,22781,22783],{"id":22782},"design-thinking","Design Thinking",[12,22785,22786],{},"Design thinking is a problem-solving approach that is becoming increasingly popular in the product management field.",[12,22788,22789],{},"It emphasizes empathy for the user and a focus on understanding their needs, as well as prototyping and testing ideas to validate solutions.",[12,22791,22792],{},"The design thinking process typically involves five stages: Empathize, Define, Ideate, Prototype, and Test.",[675,22794,22795,22801,22807,22813,22819],{},[193,22796,22797,22800],{},[397,22798,22799],{},"Empathize:"," This stage involves understanding the user's needs, pain points, and goals through research and observation. Product managers use empathy to understand the user's perspective and gather insights that inform the product development process.",[193,22802,22803,22806],{},[397,22804,22805],{},"Define:"," In this stage, product managers take the insights gathered during the empathize stage and use them to define the problem that needs to be solved. This is where the product manager creates a clear and concise problem statement that guides the rest of the design thinking process.",[193,22808,22809,22812],{},[397,22810,22811],{},"Ideate:"," This is the stage where product managers generate ideas for solutions to the problem defined in the previous stage. This stage is all about brainstorming and generating as many ideas as possible without judging them.",[193,22814,22815,22818],{},[397,22816,22817],{},"Prototype:"," In this stage, product managers build a prototype of the solution, this can be a paper prototype or a digital one. This prototype is used to test the viability of the solution and to gather feedback from users.",[193,22820,22821,22824],{},[397,22822,22823],{},"Test:"," In this final stage, the prototype is tested with users to gather feedback and validate the solution. This stage allows product managers to iterate on the solution and make improvements before bringing it to market.",[16,22826,22828],{"id":22827},"how-to-start-as-a-product-manager","How to Start as a Product Manager",[12,22830,22831],{},"If you're looking to shift into product management, there are several steps you can take to start building the skills and knowledge you need.",[675,22833,22834,22840,22846,22852,22858],{},[193,22835,22836,22839],{},[397,22837,22838],{},"Learn the fundamentals:"," Start by learning the basics of product management, such as product strategy, market research, and user-centered design. There are many resources available online, including articles, podcasts, and online courses, that can help you get started.",[193,22841,22842,22845],{},[397,22843,22844],{},"Gain experience:"," Look for opportunities to gain experience in product management, such as taking on a product management role within your current organization or working on a side project.",[193,22847,22848,22851],{},[397,22849,22850],{},"Network:"," Connect with other product managers and professionals in the field to learn from their experiences and gain insights into the industry. Attend events and join online communities to meet other product managers.",[193,22853,22854,22857],{},[397,22855,22856],{},"Get certified:"," Some organizations and universities also offer product management certification programs that can help you build your skills and knowledge.",[193,22859,22860,22863],{},[397,22861,22862],{},"Read and stay updated:"," Keeping up-to-date with the latest trends, tools, and best practices in product management is vital to success in this field. Reading industry-specific publications and blogs, as well as books written by experienced product managers is a great way to stay current.",[12,22865,22866],{},"In conclusion, product management is a challenging yet rewarding field that requires a solid understanding of product management methodologies and best practices. By familiarizing yourself with Agile, Scrum",{"title":24,"searchDepth":25,"depth":25,"links":22868},[22869,22870,22871,22876,22877],{"id":22713,"depth":28,"text":22714},{"id":22723,"depth":28,"text":22724},{"id":22736,"depth":28,"text":22737,"children":22872},[22873,22874,22875],{"id":22749,"depth":25,"text":22750},{"id":22762,"depth":25,"text":22763},{"id":22772,"depth":25,"text":22773},{"id":22782,"depth":28,"text":22783},{"id":22827,"depth":28,"text":22828},"https://images.unsplash.com/photo-1542626991-cbc4e32524cc?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDJ8fG1hbmFnZW1lbnR8ZW58MHx8fHwxNjc0ODYwODMx&ixlib=rb-4.0.3&q=80&w=2000",{"slug":22880,"excerpt":22881},"how-to-become-a-product-manager-methodologies-and-courses-to-take",{"type":9,"value":22882},[22883,22885],[16,22884,22714],{"id":22713},[12,22886,22717],{},"/how-to-become-a-product-manager-methodologies-and-courses-to-take","2023-01-27T23:07:02.000Z",{"title":22708,"description":22717},[340,341,2127,342],"2023-01-27T23:07:18.000Z","kwCljUXGHUFEhKK5AQSaKziNbRtKj2-Ln4p5zeQQZE0",{"id":22894,"title":22895,"author":7,"body":22896,"category":73,"description":74,"extension":31,"image":2128,"isDraft":33,"isFeatured":34,"locale":35,"meta":22914,"navigation":33,"path":22919,"publishedAt":81,"readingTime":2425,"seo":22920,"stem":22921,"tags":22922,"updatedAt":81,"__hash__":22923},"articles_en/how-to-build-a-digital-product-from-scratch-a-comprehensive-guide-for-beginners.md","How to Build a Digital Product from Scratch: A Comprehensive Guide for Beginners",{"type":9,"value":22897,"toc":22910},[22898,22901,22903,22906,22908],[12,22899,22900],{},"Building a digital product from scratch requires careful planning and deep understanding of market needs.",[16,22902,61],{"id":60},[12,22904,22905],{},"In this comprehensive guide, we'll explore the basic steps to build a successful digital product from scratch.",[16,22907,19],{"id":18},[12,22909,22],{},{"title":24,"searchDepth":25,"depth":25,"links":22911},[22912,22913],{"id":60,"depth":28,"text":61},{"id":18,"depth":28,"text":19},{"excerpt":22915},{"type":9,"value":22916},[22917],[12,22918,22900],{},"/how-to-build-a-digital-product-from-scratch-a-comprehensive-guide-for-beginners",{"title":22895,"description":74},"how-to-build-a-digital-product-from-scratch-a-comprehensive-guide-for-beginners",[73,29,375],"k39Olfdk6UPnMCHZAz3WtzTCL04NlcuUc_VOQIsGUN0",{"id":22925,"title":22926,"author":7,"body":22927,"category":2127,"description":74,"extension":31,"image":7478,"isDraft":33,"isFeatured":34,"locale":35,"meta":22939,"navigation":33,"path":22944,"publishedAt":22945,"readingTime":82,"seo":22946,"stem":22947,"tags":22948,"updatedAt":22945,"__hash__":22949},"articles_en/how-to-build-a-long-term-product-strategy.md","How to Build a Long-Term Product Strategy",{"type":9,"value":22928,"toc":22936},[22929,22932,22934],[12,22930,22931],{},"Long-term product strategy guides your decisions toward sustainable success.",[16,22933,19],{"id":18},[12,22935,22],{},{"title":24,"searchDepth":25,"depth":25,"links":22937},[22938],{"id":18,"depth":28,"text":19},{"excerpt":22940},{"type":9,"value":22941},[22942],[12,22943,22931],{},"/how-to-build-a-long-term-product-strategy","2025-02-25",{"title":22926,"description":74},"how-to-build-a-long-term-product-strategy",[73,2127,2110,48],"QGes49eR9JJlwhUZv_tmceSVMHGpaClXiJr4zgBAr0M",{"id":22951,"title":22952,"author":7,"body":22953,"category":73,"description":74,"extension":31,"image":22965,"isDraft":33,"isFeatured":34,"locale":35,"meta":22966,"navigation":33,"path":22971,"publishedAt":7513,"readingTime":1432,"seo":22972,"stem":22973,"tags":22974,"updatedAt":7513,"__hash__":22975},"articles_en/how-to-build-a-scalable-product-from-the-start.md","How to Build a Scalable Product from the Start",{"type":9,"value":22954,"toc":22962},[22955,22958,22960],[12,22956,22957],{},"Building a scalable product from the start saves you many future problems.",[16,22959,19],{"id":18},[12,22961,22],{},{"title":24,"searchDepth":25,"depth":25,"links":22963},[22964],{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1516321318423-f06f85e504b3?q=80&w=1200&auto=format&fit=crop",{"excerpt":22967},{"type":9,"value":22968},[22969],[12,22970,22957],{},"/how-to-build-a-scalable-product-from-the-start",{"title":22952,"description":74},"how-to-build-a-scalable-product-from-the-start",[73,1874,373,29],"5Xf4cEx2YM2Iw8xV6eiCDlm1H1Hdd2Dt3Mj40MwpA-g",{"id":22977,"title":22978,"author":7,"body":22979,"category":29,"description":30,"extension":31,"image":6799,"isDraft":33,"isFeatured":34,"locale":35,"meta":22991,"navigation":33,"path":22996,"publishedAt":18243,"readingTime":1750,"seo":22997,"stem":22998,"tags":22999,"updatedAt":18243,"__hash__":23002},"articles_en/how-to-build-a-startup-brand.md","How to Build a Startup Brand",{"type":9,"value":22980,"toc":22988},[22981,22984,22986],[12,22982,22983],{},"A strong brand distinguishes your startup from competitors.",[16,22985,19],{"id":18},[12,22987,22],{},{"title":24,"searchDepth":25,"depth":25,"links":22989},[22990],{"id":18,"depth":28,"text":19},{"excerpt":22992},{"type":9,"value":22993},[22994],[12,22995,22983],{},"/how-to-build-a-startup-brand",{"title":22978,"description":30},"how-to-build-a-startup-brand",[29,47,23000,23001],"branding","marketing","BpLSzW0aBqdfdfSuPghu94n4wuXivOemxKkOe_pxriI",{"id":23004,"title":23005,"author":7,"body":23006,"category":373,"description":360,"extension":31,"image":23018,"isDraft":33,"isFeatured":34,"locale":35,"meta":23019,"navigation":33,"path":23024,"publishedAt":6834,"readingTime":82,"seo":23025,"stem":23026,"tags":23027,"updatedAt":6834,"__hash__":23031},"articles_en/how-to-build-a-successful-mobile-application.md","How to Build a Successful Mobile Application",{"type":9,"value":23007,"toc":23015},[23008,23011,23013],[12,23009,23010],{},"Developing mobile applications requires understanding the differences between platforms.",[16,23012,19],{"id":18},[12,23014,22],{},{"title":24,"searchDepth":25,"depth":25,"links":23016},[23017],{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1512941937669-90a1b58e7e9c?q=80&w=1200&auto=format&fit=crop",{"excerpt":23020},{"type":9,"value":23021},[23022],[12,23023,23010],{},"/how-to-build-a-successful-mobile-application",{"title":23005,"description":360},"how-to-build-a-successful-mobile-application",[373,23028,23029,23030],"mobile-apps","react-native","flutter","3k436M-YSBSSAU3jz2VWy3vIS4ic358a_VDnz49o7NE",{"id":23033,"title":23034,"author":7,"body":23035,"category":29,"description":30,"extension":31,"image":6764,"isDraft":33,"isFeatured":34,"locale":35,"meta":23047,"navigation":33,"path":23052,"publishedAt":23053,"readingTime":43,"seo":23054,"stem":23055,"tags":23056,"updatedAt":23053,"__hash__":23059},"articles_en/how-to-choose-the-right-co-founder.md","How to Choose the Right Co-Founder",{"type":9,"value":23036,"toc":23044},[23037,23040,23042],[12,23038,23039],{},"Choosing the right co-founder might be the most important decision in your entrepreneurial journey.",[16,23041,19],{"id":18},[12,23043,22],{},{"title":24,"searchDepth":25,"depth":25,"links":23045},[23046],{"id":18,"depth":28,"text":19},{"excerpt":23048},{"type":9,"value":23049},[23050],[12,23051,23039],{},"/how-to-choose-the-right-co-founder","2025-05-27",{"title":23034,"description":30},"how-to-choose-the-right-co-founder",[29,47,23057,23058],"partnership","team","AeSRph4h8eJav947Sp9OLnHjkwqD2Vx4ZC7QrOMje9A",{"id":23061,"title":23062,"author":7,"body":23063,"category":373,"description":360,"extension":31,"image":23075,"isDraft":33,"isFeatured":34,"locale":35,"meta":23076,"navigation":33,"path":23081,"publishedAt":6717,"readingTime":1784,"seo":23082,"stem":23083,"tags":23084,"updatedAt":6717,"__hash__":23086},"articles_en/how-to-choose-the-right-technologies-for-your-startup.md","How to Choose the Right Technologies for Your Startup",{"type":9,"value":23064,"toc":23072},[23065,23068,23070],[12,23066,23067],{},"Choosing the right technologies early saves you many problems later.",[16,23069,19],{"id":18},[12,23071,22],{},{"title":24,"searchDepth":25,"depth":25,"links":23073},[23074],{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1498050108023-c5249f4df085?q=80&w=1200&auto=format&fit=crop",{"excerpt":23077},{"type":9,"value":23078},[23079],[12,23080,23067],{},"/how-to-choose-the-right-technologies-for-your-startup",{"title":23062,"description":360},"how-to-choose-the-right-technologies-for-your-startup",[373,29,23085,375],"technology","RoN3tHpYkWgawPxAeddpI9MU3C8MDUNkQK0nDc0RN2A",{"id":23088,"title":23089,"author":7,"body":23090,"category":373,"description":360,"extension":31,"image":23102,"isDraft":33,"isFeatured":34,"locale":35,"meta":23103,"navigation":33,"path":23108,"publishedAt":1898,"readingTime":1784,"seo":23109,"stem":23110,"tags":23111,"updatedAt":1898,"__hash__":23113},"articles_en/how-to-conduct-effective-code-reviews.md","How to Conduct Effective Code Reviews",{"type":9,"value":23091,"toc":23099},[23092,23095,23097],[12,23093,23094],{},"Effective code reviews improve project quality and develop team skills.",[16,23096,19],{"id":18},[12,23098,22],{},{"title":24,"searchDepth":25,"depth":25,"links":23100},[23101],{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1516321497487-e288fb19713f?q=80&w=1200&auto=format&fit=crop",{"excerpt":23104},{"type":9,"value":23105},[23106],[12,23107,23094],{},"/how-to-conduct-effective-code-reviews",{"title":23089,"description":360},"how-to-conduct-effective-code-reviews",[373,23112,86,23058],"code-review","sNbGHrhXKEuDgH-xd1BfIul0VAxBwKCCGRTUOHuid0o",{"id":23115,"title":23116,"author":7,"body":23117,"category":73,"description":74,"extension":31,"image":7478,"isDraft":33,"isFeatured":34,"locale":35,"meta":23135,"navigation":33,"path":23140,"publishedAt":18322,"readingTime":1784,"seo":23141,"stem":23142,"tags":23143,"updatedAt":18322,"__hash__":23145},"articles_en/how-to-conduct-user-research-in-arab-culture.md","How to Conduct User Research in Arab Culture",{"type":9,"value":23118,"toc":23131},[23119,23122,23124,23127,23129],[12,23120,23121],{},"Understanding Arab users requires a special approach that takes cultural and linguistic particularities into account.",[16,23123,61],{"id":60},[12,23125,23126],{},"User research is the foundation of building successful products.",[16,23128,19],{"id":18},[12,23130,22],{},{"title":24,"searchDepth":25,"depth":25,"links":23132},[23133,23134],{"id":60,"depth":28,"text":61},{"id":18,"depth":28,"text":19},{"excerpt":23136},{"type":9,"value":23137},[23138],[12,23139,23121],{},"/how-to-conduct-user-research-in-arab-culture",{"title":23116,"description":74},"how-to-conduct-user-research-in-arab-culture",[73,29,23144,7518],"user-research","31KABt7oimSck-2-KP5bXJw5NMAjdxeOao2KzJAoTrs",{"id":23147,"title":23148,"author":7,"body":23149,"category":73,"description":74,"extension":31,"image":32,"isDraft":33,"isFeatured":34,"locale":35,"meta":23161,"navigation":33,"path":23166,"publishedAt":23167,"readingTime":43,"seo":23168,"stem":23169,"tags":23170,"updatedAt":23167,"__hash__":23172},"articles_en/how-to-develop-a-product-with-limited-resources.md","How to Develop a Product with Limited Resources",{"type":9,"value":23150,"toc":23158},[23151,23154,23156],[12,23152,23153],{},"Limited resources aren't a barrier if you know how to use them wisely.",[16,23155,19],{"id":18},[12,23157,22],{},{"title":24,"searchDepth":25,"depth":25,"links":23159},[23160],{"id":18,"depth":28,"text":19},{"excerpt":23162},{"type":9,"value":23163},[23164],[12,23165,23153],{},"/how-to-develop-a-product-with-limited-resources","2025-03-04",{"title":23148,"description":74},"how-to-develop-a-product-with-limited-resources",[73,29,23171,10335],"resources","q3P5V9fncJRgcv-yOcg07xqHtANCTj_rgcCAk3_Gnns",{"id":23174,"title":23175,"author":7,"body":23176,"category":73,"description":74,"extension":31,"image":23188,"isDraft":33,"isFeatured":34,"locale":35,"meta":23189,"navigation":33,"path":23194,"publishedAt":23195,"readingTime":43,"seo":23196,"stem":23197,"tags":23198,"updatedAt":23195,"__hash__":23199},"articles_en/how-to-effectively-manage-product-lifecycle.md","How to Effectively Manage Product Lifecycle",{"type":9,"value":23177,"toc":23185},[23178,23181,23183],[12,23179,23180],{},"Managing product lifecycle from design to retirement requires strategic planning.",[16,23182,19],{"id":18},[12,23184,22],{},{"title":24,"searchDepth":25,"depth":25,"links":23186},[23187],{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1454165205744-3b78555e5572?q=80&w=1200&auto=format&fit=crop",{"excerpt":23190},{"type":9,"value":23191},[23192],[12,23193,23180],{},"/how-to-effectively-manage-product-lifecycle","2025-01-28",{"title":23175,"description":74},"how-to-effectively-manage-product-lifecycle",[73,2127,2110],"jsocx98x2I38h4yqgiIORwVRdc1DrI_jpdaBUpu5tbE",{"id":23201,"title":23202,"author":7,"body":23203,"category":29,"description":23207,"extension":31,"image":23413,"isDraft":34,"isFeatured":34,"locale":35,"meta":23414,"navigation":33,"path":23422,"publishedAt":23423,"readingTime":2363,"seo":23424,"stem":23415,"tags":23425,"updatedAt":2080,"__hash__":23426},"articles_en/how-to-find-your-next-startup-idea.md","How to Find Your Next Startup Idea",{"type":9,"value":23204,"toc":23398},[23205,23208,23211,23213,23216,23219,23223,23227,23230,23244,23247,23251,23254,23257,23260,23264,23267,23270,23274,23277,23280,23284,23287,23291,23294,23298,23301,23331,23335,23338,23349,23353,23356,23359,23362,23365,23368,23372,23375,23378],[12,23206,23207],{},"Coming up with a side project idea is the most important part. As a rule of thumb if your idea sucks you will not succeed, therefor idea is essential so how to come up with one?",[12,23209,23210],{},"Answer: You need to solve a problem.",[3866,23212,1801],{"id":1800},[12,23214,23215],{},"You need to solve a common problem people are facing every day. So the question becomes —how to find a problem to solve?",[12,23217,23218],{},"that’s a good question, the answer is divided into two parts:",[16,23220,23222],{"id":23221},"_1-theoretical-discovery","1. Theoretical discovery",[116,23224,23226],{"id":23225},"pay-attention-to-the-problems-you-are-facing","Pay attention to the problems you are facing",[12,23228,23229],{},"The founders have a deep understanding of the problem, so you can focus on the everyday problems you have personally experienced. Start by asking these questions:",[190,23231,23232,23235,23238,23241],{},[193,23233,23234],{},"Is there anything to improve?",[193,23236,23237],{},"Is there anything I would like to change?",[193,23239,23240],{},"What are the most frustrating or time-consuming aspects of my daily routine or work?",[193,23242,23243],{},"Are there any products or services that you have used that were not up to your expectations?",[12,23245,23246],{},"By focusing on your own experiences and observations, you can gain insight into the challenges and needs of the market and potentially find a problem worth solving with your product.",[116,23248,23250],{"id":23249},"listen-to-other-peoples-problems","Listen to other people's problems",[12,23252,23253],{},"To find a valuable and unique problem to solve with your startup, it is important to listen to other people's problems. By gathering insights from potential customers, industry experts, and other stakeholders, you can identify problems worth solving and ensure that your solution is valuable and in demand.",[12,23255,23256],{},"You don’t need to conduct formal interviews, just be curious and have empathy toward them even if it’s a small problem.",[12,23258,23259],{},"The more frequent your problem is and the more people are served by your solution the higher the returns will be.",[116,23261,23263],{"id":23262},"reframe-existing-problems","Reframe existing problems",[12,23265,23266],{},"In our daily lives, there are often inadequate solutions to big problems. For example, toilet paper may not be the best option for hygiene. There may be other solutions, such as bidets or toilet sprayers, that could improve on existing solutions.",[12,23268,23269],{},"By reframing existing problems, you can identify opportunities to create better solutions and guide the direction of your project.",[116,23271,23273],{"id":23272},"read-books-and-watch-sci-fi-movies","Read books and watch Sci-fi movies:",[12,23275,23276],{},"One way to find potential problems to solve is to read science fiction books and watch sci-fi films. These mediums can help you anticipate the problems that people may face shortly.",[12,23278,23279],{},"By understanding these future challenges, you can identify opportunities to create solutions and guide the direction of your startup. Science fiction can be a valuable source of inspiration and insight for aspiring entrepreneurs.",[116,23281,23283],{"id":23282},"expose-yourself-to-more-problems","Expose yourself to more problems!",[12,23285,23286],{},"It is important to expose yourself to more problems. This can include learning new skills, meeting people from different cultures, starting a new sport, or traveling around the world.",[16,23288,23290],{"id":23289},"_2-practical-discovery","2. Practical discovery",[12,23292,23293],{},"Here are some strategies you can use to apply a practical discovery approach to finding problems to solve:",[116,23295,23297],{"id":23296},"google-trends","Google Trends",[12,23299,23300],{},"You can gain insights into the popularity and relevance of keywords and phrases in the global market, and use this information to identify potential problems worth solving. you can better anticipate the needs and challenges of potential customers, and create solutions that are valuable and in demand",[675,23302,23303,23313,23316,23319,23322,23325,23328],{},[193,23304,23305,23306,23312],{},"Go to the Google Trends website (",[397,23307,23308],{},[173,23309,23310],{"href":23310,"rel":23311},"https://trends.google.com/",[177],") and sign in with your Google account.",[193,23314,23315],{},"In the \"Explore\" section, enter a keyword or phrase related to your industry or area of interest. This could be a specific product, service, technology, or problem that you are interested in.",[193,23317,23318],{},"Use the left-hand side of the page filters to refine your search by location, time period, category, and other factors. This can help you narrow down the search results and focus on the trends that are most relevant to your startup.",[193,23320,23321],{},"Review the search results to see the popularity of the keyword or phrase over time, as well as related topics and queries. This can give you an idea of the trends and topics that are currently relevant to your industry or area of interest.",[193,23323,23324],{},"Use the \"Insights\" tab to see the top related queries and rising related topics for your keyword or phrase. This can help you identify potential problems or needs that are emerging in the market.",[193,23326,23327],{},"Use the \"Interest by subregion\" and \"Interest over time\" charts to see how the popularity of your keyword or phrase varies by location and over time. This can help you understand the regional and temporal dynamics of the market and identify potential problems worth solving.",[193,23329,23330],{},"Use the \"Interest by category\" chart to see how the popularity of your keyword or phrase varies by category. This can help you understand the broader context of the market and identify potential problems worth solving.",[116,23332,23334],{"id":23333},"quora","Quora",[12,23336,23337],{},"Quora is a community-based platform where people ask questions and seek solutions to their problems. It is also a valuable tool for finding potential problems to solve.",[675,23339,23340,23343,23346],{},[193,23341,23342],{},"Use the search bar on Quora to search for keywords or phrases related to your industry or area of interest. This can help you discover the most popular topics and questions in the market, and identify potential problems that people are discussing.",[193,23344,23345],{},"Follow relevant topics on Quora, and pay attention to the questions that are being asked by users on these topics. This can help you understand the challenges and needs of the market, and identify potential problems that are worth solving.",[193,23347,23348],{},"Ask questions yourself. To do this, click on the \"Add Question\" button on Quora, and ask a question related to your industry or area of interest. For example, you could ask, \"Which problems do you face when...\" or \"What's a common problem that you face every day?\" By asking these types of questions, you can gather insights and feedback from other users.",[116,23350,23352],{"id":23351},"twitter","Twitter",[12,23354,23355],{},"Using social media to find potential problems to solve is a common strategy. Twitter is a particularly good platform for this, as many users use it to share their problems and ask for solutions. When you see someone tweet about a problem they are having, you can take note of it in your diary. This can help you track the problems that people are facing, and identify potential opportunities for your next project.",[12,23357,23358],{},"People who are looking for solutions on Twitter often tweet things like:",[12,23360,23361],{},"\"I need help with [problem]\"",[12,23363,23364],{},"\"Does anyone know how to [solve this problem]?\"",[12,23366,23367],{},"\"Is there a [product or service] that can help with [problem]?\"",[116,23369,23371],{"id":23370},"reddit","Reddit",[12,23373,23374],{},"Reddit is a popular online platform for discussing and sharing content on a wide variety of topics. It is organized into communities called subreddits, which are dedicated to specific interests or topics.",[12,23376,23377],{},"To use Reddit to search for problems to solve with your side project, you can follow these steps:",[675,23379,23380,23383,23386,23389,23392,23395],{},[193,23381,23382],{},"Sign up for a Reddit account and verify your email address.",[193,23384,23385],{},"Use the search bar in the upper right corner of the Reddit homepage to search for keywords related to your side project or the type of problem you are looking to solve.",[193,23387,23388],{},"Look for subreddits related to your topic of interest. You can find subreddits by clicking on the \"Communities\" tab on the Reddit homepage, or by searching for specific subreddits using the search bar.",[193,23390,23391],{},"Once you have found a relevant subreddit, take some time to browse through the posts and discussions to get a sense of the types of problems that people are facing in that community.",[193,23393,23394],{},"If you see a problem that you think you can help solve with your side project, you can join the discussion and offer your suggestions or advice. Alternatively, you can start a new post in the subreddit asking for suggestions or ideas for problems to solve with your side project.",[193,23396,23397],{},"Keep an eye on the subreddit and check back regularly for new discussions or posts that may be relevant to your side project. This will help you stay up-to-date on the latest trends and challenges facing the community, and give you opportunities to offer your expertise or assistance.",{"title":24,"searchDepth":25,"depth":25,"links":23399},[23400,23407],{"id":23221,"depth":28,"text":23222,"children":23401},[23402,23403,23404,23405,23406],{"id":23225,"depth":25,"text":23226},{"id":23249,"depth":25,"text":23250},{"id":23262,"depth":25,"text":23263},{"id":23272,"depth":25,"text":23273},{"id":23282,"depth":25,"text":23283},{"id":23289,"depth":28,"text":23290,"children":23408},[23409,23410,23411,23412],{"id":23296,"depth":25,"text":23297},{"id":23333,"depth":25,"text":23334},{"id":23351,"depth":25,"text":23352},{"id":23370,"depth":25,"text":23371},"https://images.unsplash.com/photo-1577401159468-3bbc7ee440b5?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDEyfHxmaW5kfGVufDB8fHx8MTY3NjMyNzQ1NA&ixlib=rb-4.0.3&q=80&w=2000",{"slug":23415,"excerpt":23416},"how-to-find-your-next-startup-idea",{"type":9,"value":23417},[23418,23420],[12,23419,23207],{},[12,23421,23210],{},"/how-to-find-your-next-startup-idea","2023-02-13T22:36:11.000Z",{"title":23202,"description":23207},[1997,339,340,341,29,342],"Id5TurejMFSiQ3vpus71dFFHh8DExLxWI8lfRzV85Sg",{"id":23428,"title":23429,"author":7,"body":23430,"category":29,"description":30,"extension":31,"image":23442,"isDraft":33,"isFeatured":34,"locale":35,"meta":23443,"navigation":33,"path":23448,"publishedAt":23449,"readingTime":43,"seo":23450,"stem":23451,"tags":23452,"updatedAt":23449,"__hash__":23454},"articles_en/how-to-handle-intense-competition.md","How to Handle Intense Competition",{"type":9,"value":23431,"toc":23439},[23432,23435,23437],[12,23433,23434],{},"Intense competition is an opportunity for innovation and differentiation.",[16,23436,19],{"id":18},[12,23438,22],{},{"title":24,"searchDepth":25,"depth":25,"links":23440},[23441],{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1553877522-43269d4ea984?q=80&w=1200&auto=format&fit=crop",{"excerpt":23444},{"type":9,"value":23445},[23446],[12,23447,23434],{},"/how-to-handle-intense-competition","2025-07-01",{"title":23429,"description":30},"how-to-handle-intense-competition",[29,47,23453,2110],"competition","tZdTrcWFoi0N0VbV5vtvBHc5cDHfeH1w5B1noXf600Y",{"id":23456,"title":23457,"author":7,"body":23458,"category":29,"description":30,"extension":31,"image":23470,"isDraft":33,"isFeatured":34,"locale":35,"meta":23471,"navigation":33,"path":23476,"publishedAt":18350,"readingTime":82,"seo":23477,"stem":23478,"tags":23479,"updatedAt":18350,"__hash__":23481},"articles_en/how-to-handle-investor-rejection.md","How to Handle Investor Rejection",{"type":9,"value":23459,"toc":23467},[23460,23463,23465],[12,23461,23462],{},"Investor rejection is not the end of the road, but an opportunity to learn and improve.",[16,23464,19],{"id":18},[12,23466,22],{},{"title":24,"searchDepth":25,"depth":25,"links":23468},[23469],{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1551836022-d5d88e9218df?q=80&w=1200&auto=format&fit=crop",{"excerpt":23472},{"type":9,"value":23473},[23474],[12,23475,23462],{},"/how-to-handle-investor-rejection",{"title":23457,"description":30},"how-to-handle-investor-rejection",[29,47,18354,23480],"personal-growth","s6jQ2c4zR8ZQHpXB_AtOTiSYlDAwM9UajE70iJEhmUI",{"id":23483,"title":23484,"author":7,"body":23485,"category":73,"description":74,"extension":31,"image":23497,"isDraft":33,"isFeatured":34,"locale":35,"meta":23498,"navigation":33,"path":23503,"publishedAt":23504,"readingTime":43,"seo":23505,"stem":23506,"tags":23507,"updatedAt":23504,"__hash__":23509},"articles_en/how-to-handle-negative-user-feedback.md","How to Handle Negative User Feedback",{"type":9,"value":23486,"toc":23494},[23487,23490,23492],[12,23488,23489],{},"Negative user feedback is a golden opportunity to improve your product.",[16,23491,19],{"id":18},[12,23493,22],{},{"title":24,"searchDepth":25,"depth":25,"links":23495},[23496],{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1556761175-b413da4baf72?q=80&w=1200&auto=format&fit=crop",{"excerpt":23499},{"type":9,"value":23500},[23501],[12,23502,23489],{},"/how-to-handle-negative-user-feedback","2025-02-11",{"title":23484,"description":74},"how-to-handle-negative-user-feedback",[73,23508,2127],"customer-service","L7Z6zrHaM0wTYxOwheBXk0ti8jBInns6WOrGnI5drKQ",{"id":23511,"title":23512,"author":7,"body":23513,"category":373,"description":360,"extension":31,"image":23525,"isDraft":33,"isFeatured":34,"locale":35,"meta":23526,"navigation":33,"path":23531,"publishedAt":23532,"readingTime":369,"seo":23533,"stem":23534,"tags":23535,"updatedAt":23532,"__hash__":23537},"articles_en/how-to-implement-ci-cd.md","How to Implement CI/CD",{"type":9,"value":23514,"toc":23522},[23515,23518,23520],[12,23516,23517],{},"CI/CD speeds up development and improves product quality.",[16,23519,19],{"id":18},[12,23521,22],{},{"title":24,"searchDepth":25,"depth":25,"links":23523},[23524],{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1667372393119-3d4c48d07fc9?q=80&w=1200&auto=format&fit=crop",{"excerpt":23527},{"type":9,"value":23528},[23529],[12,23530,23517],{},"/how-to-implement-ci-cd","2025-04-15",{"title":23512,"description":360},"how-to-implement-ci-cd",[373,1873,23536,1756],"ci-cd","A-_z23uWnQuNIKAqxglEvPK9FdHejUwqiMc8wjBCUUw",{"id":23539,"title":23540,"author":7,"body":23541,"category":2127,"description":74,"extension":31,"image":23553,"isDraft":33,"isFeatured":34,"locale":35,"meta":23554,"navigation":33,"path":23559,"publishedAt":2135,"readingTime":82,"seo":23560,"stem":23561,"tags":23562,"updatedAt":2135,"__hash__":23564},"articles_en/how-to-launch-a-new-product-in-the-arab-market.md","How to Launch a New Product in the Arab Market",{"type":9,"value":23542,"toc":23550},[23543,23546,23548],[12,23544,23545],{},"Launching a new product in the Arab market requires deep local market understanding.",[16,23547,19],{"id":18},[12,23549,22],{},{"title":24,"searchDepth":25,"depth":25,"links":23551},[23552],{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1519389950473-47ba0277781c?q=80&w=1200&auto=format&fit=crop",{"excerpt":23555},{"type":9,"value":23556},[23557],[12,23558,23545],{},"/how-to-launch-a-new-product-in-the-arab-market",{"title":23540,"description":74},"how-to-launch-a-new-product-in-the-arab-market",[73,2127,23563,23001],"launch","bYI8rqw78RmqpoVWQg1WmG9q0eZ3uM2pmvchgOHB6-I",{"id":23566,"title":23567,"author":7,"body":23568,"category":29,"description":30,"extension":31,"image":23580,"isDraft":33,"isFeatured":34,"locale":35,"meta":23581,"navigation":33,"path":23586,"publishedAt":2104,"readingTime":2382,"seo":23587,"stem":23588,"tags":23589,"updatedAt":2104,"__hash__":23591},"articles_en/how-to-manage-cash-flow-in-startups.md","How to Manage Cash Flow in Startups",{"type":9,"value":23569,"toc":23577},[23570,23573,23575],[12,23571,23572],{},"Effective cash flow management means the difference between success and failure for startups.",[16,23574,19],{"id":18},[12,23576,22],{},{"title":24,"searchDepth":25,"depth":25,"links":23578},[23579],{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1554224155-8d04cb21cd6c?q=80&w=1200&auto=format&fit=crop",{"excerpt":23582},{"type":9,"value":23583},[23584],[12,23585,23572],{},"/how-to-manage-cash-flow-in-startups",{"title":23567,"description":30},"how-to-manage-cash-flow-in-startups",[29,47,18354,23590],"financial-management","Ek-Ut7uiUooIEZk0rNUJJKaMh11oySq0G3fOSF9gCto",{"id":23593,"title":23594,"author":7,"body":23595,"category":2127,"description":74,"extension":31,"image":23607,"isDraft":33,"isFeatured":34,"locale":35,"meta":23608,"navigation":33,"path":23613,"publishedAt":23614,"readingTime":82,"seo":23615,"stem":23616,"tags":23617,"updatedAt":23614,"__hash__":23620},"articles_en/how-to-measure-customer-satisfaction-with-your-product.md","How to Measure Customer Satisfaction with Your Product",{"type":9,"value":23596,"toc":23604},[23597,23600,23602],[12,23598,23599],{},"Measuring customer satisfaction is essential for continuous product improvement.",[16,23601,19],{"id":18},[12,23603,22],{},{"title":24,"searchDepth":25,"depth":25,"links":23605},[23606],{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1600880292203-757bb62b4baf?q=80&w=1200&auto=format&fit=crop",{"excerpt":23609},{"type":9,"value":23610},[23611],[12,23612,23599],{},"/how-to-measure-customer-satisfaction-with-your-product","2025-03-11",{"title":23594,"description":74},"how-to-measure-customer-satisfaction-with-your-product",[73,2127,23618,23619],"customer-satisfaction","analytics","izT_gTZjNpu3krIZ9b5QwnXN_j-v2qc2vir-1mns4NA",{"id":23622,"title":23623,"author":7,"body":23624,"category":29,"description":30,"extension":31,"image":23636,"isDraft":33,"isFeatured":34,"locale":35,"meta":23637,"navigation":33,"path":23642,"publishedAt":23643,"readingTime":2382,"seo":23644,"stem":23645,"tags":23646,"updatedAt":23643,"__hash__":23649},"articles_en/how-to-measure-startup-success.md","How to Measure Startup Success",{"type":9,"value":23625,"toc":23633},[23626,23629,23631],[12,23627,23628],{},"Measuring success with the right metrics guides your strategic decisions.",[16,23630,19],{"id":18},[12,23632,22],{},{"title":24,"searchDepth":25,"depth":25,"links":23634},[23635],{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1551288049-bebda4e38f71?q=80&w=1200&auto=format&fit=crop",{"excerpt":23638},{"type":9,"value":23639},[23640],[12,23641,23628],{},"/how-to-measure-startup-success","2025-06-24",{"title":23623,"description":30},"how-to-measure-startup-success",[29,47,23647,23648],"metrics","kpis","euQg1vAT8XoIBP4EjoVtyt18V312tdcsqt-c4SK7KeY",{"id":23651,"title":23652,"author":7,"body":23653,"category":373,"description":360,"extension":31,"image":1891,"isDraft":33,"isFeatured":34,"locale":35,"meta":23665,"navigation":33,"path":23670,"publishedAt":1869,"readingTime":1784,"seo":23671,"stem":23672,"tags":23673,"updatedAt":1869,"__hash__":23675},"articles_en/how-to-optimize-web-application-performance.md","How to Optimize Web Application Performance",{"type":9,"value":23654,"toc":23662},[23655,23658,23660],[12,23656,23657],{},"High performance means better user experience and higher conversion rates.",[16,23659,19],{"id":18},[12,23661,22],{},{"title":24,"searchDepth":25,"depth":25,"links":23663},[23664],{"id":18,"depth":28,"text":19},{"excerpt":23666},{"type":9,"value":23667},[23668],[12,23669,23657],{},"/how-to-optimize-web-application-performance",{"title":23652,"description":360},"how-to-optimize-web-application-performance",[373,23674,2078,86],"performance","4LZd5QGrSSAEvxc6fnogLuDJtgTPvcuNDzFC5yqIcaE",{"id":23677,"title":23678,"author":7,"body":23679,"category":73,"description":74,"extension":31,"image":23442,"isDraft":33,"isFeatured":34,"locale":35,"meta":23691,"navigation":33,"path":23696,"publishedAt":6806,"readingTime":1432,"seo":23697,"stem":23698,"tags":23699,"updatedAt":6806,"__hash__":23700},"articles_en/how-to-prioritize-features-in-your-product.md","How to Prioritize Features in Your Product",{"type":9,"value":23680,"toc":23688},[23681,23684,23686],[12,23682,23683],{},"Properly prioritizing features ensures your team focuses on what really matters.",[16,23685,19],{"id":18},[12,23687,22],{},{"title":24,"searchDepth":25,"depth":25,"links":23689},[23690],{"id":18,"depth":28,"text":19},{"excerpt":23692},{"type":9,"value":23693},[23694],[12,23695,23683],{},"/how-to-prioritize-features-in-your-product",{"title":23678,"description":74},"how-to-prioritize-features-in-your-product",[73,2127,29],"c5Nl9dbqrc8QsNBNFmKHhrsVTob2CxYTEWmMnIU5il0",{"id":23702,"title":23703,"author":7,"body":23704,"category":373,"description":360,"extension":31,"image":23716,"isDraft":33,"isFeatured":34,"locale":35,"meta":23717,"navigation":33,"path":23722,"publishedAt":1783,"readingTime":43,"seo":23723,"stem":23724,"tags":23725,"updatedAt":1783,"__hash__":23726},"articles_en/how-to-set-up-scalable-infrastructure.md","How to Set Up Scalable Infrastructure",{"type":9,"value":23705,"toc":23713},[23706,23709,23711],[12,23707,23708],{},"Scalable infrastructure ensures your application grows without problems.",[16,23710,19],{"id":18},[12,23712,22],{},{"title":24,"searchDepth":25,"depth":25,"links":23714},[23715],{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1558494949-ef010cbdcc31?q=80&w=1200&auto=format&fit=crop",{"excerpt":23718},{"type":9,"value":23719},[23720],[12,23721,23708],{},"/how-to-set-up-scalable-infrastructure",{"title":23703,"description":360},"how-to-set-up-scalable-infrastructure",[373,1874,1873,6838],"w8QOWeVLCpPwNg8yQUMRiq3FTitpcZsduytWWL9YfcQ",{"id":23728,"title":23729,"author":7,"body":23730,"category":373,"description":360,"extension":31,"image":23102,"isDraft":33,"isFeatured":34,"locale":35,"meta":23742,"navigation":33,"path":23747,"publishedAt":23748,"readingTime":369,"seo":23749,"stem":23750,"tags":23751,"updatedAt":23748,"__hash__":23754},"articles_en/how-to-test-applications-comprehensively.md","How to Test Applications Comprehensively",{"type":9,"value":23731,"toc":23739},[23732,23735,23737],[12,23733,23734],{},"Comprehensive testing ensures product quality and reduces programming errors.",[16,23736,19],{"id":18},[12,23738,22],{},{"title":24,"searchDepth":25,"depth":25,"links":23740},[23741],{"id":18,"depth":28,"text":19},{"excerpt":23743},{"type":9,"value":23744},[23745],[12,23746,23734],{},"/how-to-test-applications-comprehensively","2025-05-06",{"title":23729,"description":360},"how-to-test-applications-comprehensively",[373,23752,23753,86],"testing","qa","c-HqDoi4G91nqzFAbENAZLgpVRnI7EhogcPfhybP65I",{"id":23756,"title":23757,"author":7,"body":23758,"category":29,"description":30,"extension":31,"image":6799,"isDraft":33,"isFeatured":34,"locale":35,"meta":23770,"navigation":33,"path":23775,"publishedAt":42,"readingTime":1750,"seo":23776,"stem":23777,"tags":23778,"updatedAt":42,"__hash__":23780},"articles_en/how-to-write-a-convincing-business-plan-for-arab-investors.md","How to Write a Convincing Business Plan for Arab Investors",{"type":9,"value":23759,"toc":23767},[23760,23763,23765],[12,23761,23762],{},"A convincing business plan is your key to getting funding from investors.",[16,23764,19],{"id":18},[12,23766,22],{},{"title":24,"searchDepth":25,"depth":25,"links":23768},[23769],{"id":18,"depth":28,"text":19},{"excerpt":23771},{"type":9,"value":23772},[23773],[12,23774,23762],{},"/how-to-write-a-convincing-business-plan-for-arab-investors",{"title":23757,"description":30},"how-to-write-a-convincing-business-plan-for-arab-investors",[29,47,18354,23779],"business-plan","T-ivj-MlL-EiJzjvEkTWZ7DVmxJV9zEu5a_C1uWkhKU",{"id":23782,"title":23783,"author":7,"body":23784,"category":29,"description":23994,"extension":31,"image":23995,"isDraft":34,"isFeatured":33,"locale":35,"meta":23996,"navigation":33,"path":24001,"publishedAt":24002,"readingTime":2425,"seo":24003,"stem":24004,"tags":24005,"updatedAt":1749,"__hash__":24009},"articles_en/indie-hacker-journey.md","My Journey as an Indie Hacker: Building Products, Facing Challenges, and Lessons Learned",{"type":9,"value":23785,"toc":23984},[23786,23789,23793,23796,23799,23803,23806,23819,23822,23826,23829,23855,23858,23862,23865,23891,23898,23902,23905,23908,23912,23915,23918,23944,23947,23951,23954,23974,23978,23981],[12,23787,23788],{},"Embarking on the indie hacker journey—building and launching products independently—has been one of the most challenging, enlightening, and ultimately rewarding experiences of my professional life. Over the past few years, I've navigated the turbulent waters of product creation, faced down daunting obstacles, and collected a treasure trove of lessons that have fundamentally shaped my approach to entrepreneurship. This is a reflection on that journey.",[16,23790,23792],{"id":23791},"the-spark-why-i-chose-the-indie-path","The Spark: Why I Chose the Indie Path",[12,23794,23795],{},"My journey began not with a grand vision, but with a persistent itch. Working in traditional tech roles, I often encountered problems I felt could be solved more elegantly or tools that were missing from my own workflow. The desire to build these solutions myself, to have full creative control, and to directly impact users led me to leave the perceived safety of full-time employment and step into the unpredictable world of indie hacking.",[12,23797,23798],{},"The allure was undeniable: the freedom to choose my projects, set my own hours, and build a business aligned with my values. However, I quickly learned that this autonomy came hand-in-hand with a unique set of pressures and responsibilities.",[16,23800,23802],{"id":23801},"lesson-1-the-peril-of-a-solution-looking-for-a-problem","Lesson 1: The Peril of a Solution Looking for a Problem",[12,23804,23805],{},"My first foray into product development was a classic rookie mistake. I fell in love with a technology and built a sophisticated solution... before truly understanding if anyone needed it. Six months of intense coding resulted in a polished product that gathered digital dust.",[23807,23808,23809],"blockquote",{},[12,23810,23811,23814,23815,23818],{},[397,23812,23813],{},"Key Takeaway:"," Validate your idea rigorously ",[6963,23816,23817],{},"before"," writing a single line of code. Talk to potential users, understand their pain points, and confirm they are willing to pay for a solution. A landing page with an email signup, a simple prototype, or even a series of customer interviews can save you months, if not years, of wasted effort.",[12,23820,23821],{},"For my second product, I flipped the script. I started by identifying a recurring frustration within a niche community I was part of. I conducted dozens of interviews, created a simple landing page outlining the proposed solution, and collected pre-orders. Only then, with clear market validation, did I begin development.",[16,23823,23825],{"id":23824},"lesson-2-the-power-of-building-in-public","Lesson 2: The Power of Building in Public",[12,23827,23828],{},"One of the most impactful decisions I made was to build in public. Sharing my progress, struggles, metrics (yes, even the scary early ones!), and learnings on platforms like Twitter, Indie Hackers, and my personal blog had several profound benefits:",[675,23830,23831,23837,23843,23849],{},[193,23832,23833,23836],{},[397,23834,23835],{},"Audience Building:"," It organically attracted a community of like-minded individuals, potential users, and supporters.",[193,23838,23839,23842],{},[397,23840,23841],{},"Early Feedback:"," I received invaluable feedback throughout the development process, allowing me to iterate and pivot based on real user insights, not just assumptions.",[193,23844,23845,23848],{},[397,23846,23847],{},"Accountability:"," Knowing I had an audience expecting updates kept me disciplined and motivated, especially during challenging periods.",[193,23850,23851,23854],{},[397,23852,23853],{},"Networking:"," It connected me with other indie hackers, mentors, and even future collaborators. The sense of camaraderie in the indie community is incredibly supportive.",[12,23856,23857],{},"Building in public isn't just about transparency; it's a potent, low-cost marketing strategy and a way to build trust and credibility.",[16,23859,23861],{"id":23860},"lesson-3-the-slow-unsexy-climb-of-revenue","Lesson 3: The Slow, Unsexy Climb of Revenue",[12,23863,23864],{},"The hockey-stick growth charts often celebrated in startup lore are the exception, not the rule, especially for bootstrapped indie hackers. The reality of revenue generation is often a slow, grinding, and unglamorous climb. My Monthly Recurring Revenue (MRR) journey looked something like this:",[190,23866,23867,23873,23879,23885],{},[193,23868,23869,23872],{},[397,23870,23871],{},"Months 1-3:"," $0. Lots of building, little to no income.",[193,23874,23875,23878],{},[397,23876,23877],{},"Months 4-6:"," $50 MRR. My first paying customers! The validation was more valuable than the cash.",[193,23880,23881,23884],{},[397,23882,23883],{},"Months 7-12:"," $500 MRR. Slow, incremental growth driven by word-of-mouth and content marketing.",[193,23886,23887,23890],{},[397,23888,23889],{},"Months 13-18:"," $2,000 MRR. Reached a point where the product started to gain some organic traction.",[23807,23892,23893],{},[12,23894,23895,23897],{},[397,23896,23813],{}," Be patient and persistent. Sustainable growth takes time. Focus on providing real value to your users, and the revenue will follow. Don't get discouraged by slow beginnings.",[16,23899,23901],{"id":23900},"lesson-4-the-importance-of-shipping-and-iterating","Lesson 4: The Importance of Shipping and Iterating",[12,23903,23904],{},"Perfectionism is the enemy of progress for an indie hacker. It's easy to get caught in an endless loop of adding one more feature or polishing one more detail before launching.",[12,23906,23907],{},"My most successful products were those I launched early, often with a minimal feature set (Minimum Viable Product - MVP), and then iterated upon based on user feedback. Shipping an imperfect product is far better than never shipping a “perfect” one.",[16,23909,23911],{"id":23910},"lesson-5-marketing-is-not-an-afterthought","Lesson 5: Marketing is Not an Afterthought",[12,23913,23914],{},"As a developer, it's natural to focus on building the product. However, a great product with no marketing will likely fail. Marketing and distribution are just as crucial as development.",[12,23916,23917],{},"I had to learn:",[190,23919,23920,23926,23932,23938],{},[193,23921,23922,23925],{},[397,23923,23924],{},"Content Marketing:"," Writing blog posts, creating tutorials, and sharing valuable content related to my product's niche.",[193,23927,23928,23931],{},[397,23929,23930],{},"SEO Basics:"," Understanding how to make my product discoverable on search engines.",[193,23933,23934,23937],{},[397,23935,23936],{},"Community Engagement:"," Actively participating in relevant online communities (without spamming).",[193,23939,23940,23943],{},[397,23941,23942],{},"Direct Outreach:"," Sometimes, you just have to reach out to potential customers directly.",[12,23945,23946],{},"Marketing is an ongoing process, not a one-time task.",[16,23948,23950],{"id":23949},"lesson-6-the-solopreneurs-mental-game","Lesson 6: The Solopreneur’s Mental Game",[12,23952,23953],{},"Indie hacking can be a lonely journey. The weight of all decisions—product, marketing, support, finance—rests on your shoulders. Dealing with uncertainty, self-doubt, and the inevitable setbacks is a significant part of the experience.",[190,23955,23956,23962,23968],{},[193,23957,23958,23961],{},[397,23959,23960],{},"Find Your Tribe:"," Connect with other indie hackers. Share your struggles and celebrate your wins together.",[193,23963,23964,23967],{},[397,23965,23966],{},"Set Realistic Expectations:"," Avoid comparing your journey to others. Everyone’s path is different.",[193,23969,23970,23973],{},[397,23971,23972],{},"Prioritize Mental Health:"," Take breaks, exercise, and have interests outside of your work. Burnout is a real risk.",[16,23975,23977],{"id":23976},"the-journey-continues","The Journey Continues",[12,23979,23980],{},"My indie hacker journey is far from over. There are always new challenges to overcome and new lessons to learn. But the ability to create something from nothing, to solve real problems for people, and to build a business on my own terms is an incredibly fulfilling pursuit.",[12,23982,23983],{},"If you're considering the indie path, know that it will test you in ways you can't imagine. But with passion, persistence, a willingness to learn, and a focus on providing value, it's a journey well worth taking.",{"title":24,"searchDepth":25,"depth":25,"links":23985},[23986,23987,23988,23989,23990,23991,23992,23993],{"id":23791,"depth":28,"text":23792},{"id":23801,"depth":28,"text":23802},{"id":23824,"depth":28,"text":23825},{"id":23860,"depth":28,"text":23861},{"id":23900,"depth":28,"text":23901},{"id":23910,"depth":28,"text":23911},{"id":23949,"depth":28,"text":23950},{"id":23976,"depth":28,"text":23977},"A personal reflection on the rollercoaster ride of indie hacking: from initial ideas and product validation to building in public, revenue realities, and invaluable lessons for aspiring solo founders.","https://images.unsplash.com/photo-1556761175-5973dc0f32e7?q=80&w=1200&auto=format&fit=crop",{"excerpt":23997},{"type":9,"value":23998},[23999],[12,24000,23788],{},"/indie-hacker-journey","2025-04-25",{"title":23783,"description":23994},"indie-hacker-journey",[24006,29,47,24007,73,24008],"indie-hacking","solopreneurship","lessons-learned","kOZRY8PjKrcFzqVICpJBhjAWEtEdJG3ybYjJrVAakiM",{"id":24011,"title":24012,"author":7,"body":24013,"category":1829,"description":24040,"extension":31,"image":24041,"isDraft":33,"isFeatured":34,"locale":35,"meta":24042,"navigation":33,"path":24047,"publishedAt":1838,"readingTime":1839,"seo":24048,"stem":24049,"tags":24050,"updatedAt":1838,"__hash__":24051},"articles_en/iqraa-arabic-language-teaching-platform-case-study.md","Iqraa: Building a Platform to Teach Arabic Language",{"type":9,"value":24014,"toc":24034},[24015,24018,24020,24022,24024,24026,24028,24030,24032],[12,24016,24017],{},"An in-depth case study exploring the complete journey of building Iqraa, a platform designed to teach Arabic language.",[16,24019,1801],{"id":1800},[12,24021,1804],{},[16,24023,1808],{"id":1807},[12,24025,1804],{},[16,24027,1814],{"id":1813},[12,24029,1804],{},[16,24031,1820],{"id":1819},[12,24033,1804],{},{"title":24,"searchDepth":25,"depth":25,"links":24035},[24036,24037,24038,24039],{"id":1800,"depth":28,"text":1801},{"id":1807,"depth":28,"text":1808},{"id":1813,"depth":28,"text":1814},{"id":1819,"depth":28,"text":1820},"A comprehensive case study of developing Iqraa, a platform dedicated to teaching Arabic language from problem discovery to growth.","https://images.unsplash.com/photo-1546410531-bb4caa6b424d?q=80&w=1200&auto=format&fit=crop",{"excerpt":24043},{"type":9,"value":24044},[24045],[12,24046,24017],{},"/iqraa-arabic-language-teaching-platform-case-study",{"title":24012,"description":24040},"iqraa-arabic-language-teaching-platform-case-study",[1829,73,1845,1844],"9q9jIq9gB9oSPLOD179_OKet8rpQGAc66khYpHB6x8M",{"id":24053,"title":24054,"author":7,"body":24055,"category":1829,"description":24082,"extension":31,"image":32,"isDraft":33,"isFeatured":34,"locale":35,"meta":24083,"navigation":33,"path":24088,"publishedAt":1838,"readingTime":1839,"seo":24089,"stem":24090,"tags":24091,"updatedAt":1838,"__hash__":24094},"articles_en/issue-pulse-feedback-management-case-study.md","Issue Pulse: Customer Feedback and Issue Management Platform",{"type":9,"value":24056,"toc":24076},[24057,24060,24062,24064,24066,24068,24070,24072,24074],[12,24058,24059],{},"Deep dive into Issue Pulse, a comprehensive platform for managing customer issues and feedback through embeddable widgets.",[16,24061,1801],{"id":1800},[12,24063,1804],{},[16,24065,1808],{"id":1807},[12,24067,1804],{},[16,24069,1814],{"id":1813},[12,24071,1804],{},[16,24073,1820],{"id":1819},[12,24075,1804],{},{"title":24,"searchDepth":25,"depth":25,"links":24077},[24078,24079,24080,24081],{"id":1800,"depth":28,"text":1801},{"id":1807,"depth":28,"text":1808},{"id":1813,"depth":28,"text":1814},{"id":1819,"depth":28,"text":1820},"Case study of Issue Pulse, a platform with embeddable widgets for managing customer issues and feedback directly from client websites.",{"excerpt":24084},{"type":9,"value":24085},[24086],[12,24087,24059],{},"/issue-pulse-feedback-management-case-study",{"title":24054,"description":24082},"issue-pulse-feedback-management-case-study",[1829,73,24092,10383,24093],"customer-support","feedback-management","f0zmmaewuhSQDiE428GYj68e29eR4WhHMvIh7RPjPmM",{"id":24096,"title":24097,"author":7,"body":24098,"category":1829,"description":24125,"extension":31,"image":24126,"isDraft":33,"isFeatured":34,"locale":35,"meta":24127,"navigation":33,"path":24132,"publishedAt":1838,"readingTime":1839,"seo":24133,"stem":24134,"tags":24135,"updatedAt":1838,"__hash__":24138},"articles_en/joodcms-booking-management-platform-case-study.md","JoodCMS: Website Management Platform for Booking Companies",{"type":9,"value":24099,"toc":24119},[24100,24103,24105,24107,24109,24111,24113,24115,24117],[12,24101,24102],{},"A comprehensive look at JoodCMS, a specialized content management system for booking companies and travel agencies.",[16,24104,1801],{"id":1800},[12,24106,1804],{},[16,24108,1808],{"id":1807},[12,24110,1804],{},[16,24112,1814],{"id":1813},[12,24114,1804],{},[16,24116,1820],{"id":1819},[12,24118,1804],{},{"title":24,"searchDepth":25,"depth":25,"links":24120},[24121,24122,24123,24124],{"id":1800,"depth":28,"text":1801},{"id":1807,"depth":28,"text":1808},{"id":1813,"depth":28,"text":1814},{"id":1819,"depth":28,"text":1820},"Case study of JoodCMS, a WordPress-like platform for booking companies to manage websites with themes, customizations, and integrations.","https://images.unsplash.com/photo-1499750310107-5fef28a66643?q=80&w=1200&auto=format&fit=crop",{"excerpt":24128},{"type":9,"value":24129},[24130],[12,24131,24102],{},"/joodcms-booking-management-platform-case-study",{"title":24097,"description":24125},"joodcms-booking-management-platform-case-study",[1829,73,24136,10383,24137],"cms","travel-tech","5EdXjwXB3n0GFsNtm7gKrSYm7vKTJbQm0_FkAG-nTVw",{"id":24140,"title":24141,"author":7,"body":24142,"category":373,"description":360,"extension":31,"image":24154,"isDraft":33,"isFeatured":34,"locale":35,"meta":24155,"navigation":33,"path":24160,"publishedAt":23532,"readingTime":369,"seo":24161,"stem":24162,"tags":24163,"updatedAt":23532,"__hash__":24167},"articles_en/managing-large-scale-databases.md","Managing Large-Scale Databases",{"type":9,"value":24143,"toc":24151},[24144,24147,24149],[12,24145,24146],{},"Efficient database management is essential for large-scale projects.",[16,24148,19],{"id":18},[12,24150,22],{},{"title":24,"searchDepth":25,"depth":25,"links":24152},[24153],{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1544383835-bda2bc66a55d?q=80&w=1200&auto=format&fit=crop",{"excerpt":24156},{"type":9,"value":24157},[24158],[12,24159,24146],{},"/managing-large-scale-databases",{"title":24141,"description":360},"managing-large-scale-databases",[373,24164,24165,24166],"databases","sql","nosql","rzSb7oHsxtUS3LFdq-tyZPmkXjhuK4hkrxdaIyrmIeo",{"id":24169,"title":24170,"author":7,"body":24171,"category":2127,"description":74,"extension":31,"image":23442,"isDraft":33,"isFeatured":34,"locale":35,"meta":24183,"navigation":33,"path":24188,"publishedAt":23167,"readingTime":82,"seo":24189,"stem":24190,"tags":24191,"updatedAt":23167,"__hash__":24193},"articles_en/managing-multiple-products-in-one-company.md","Managing Multiple Products in One Company",{"type":9,"value":24172,"toc":24180},[24173,24176,24178],[12,24174,24175],{},"Managing multiple products requires strict strategic coordination and planning.",[16,24177,19],{"id":18},[12,24179,22],{},{"title":24,"searchDepth":25,"depth":25,"links":24181},[24182],{"id":18,"depth":28,"text":19},{"excerpt":24184},{"type":9,"value":24185},[24186],[12,24187,24175],{},"/managing-multiple-products-in-one-company",{"title":24170,"description":74},"managing-multiple-products-in-one-company",[73,2127,24192,2110],"organization","ZQDNkiyT11nBSeQRHWzGSABC7f3NXPsfHIU3cfRqpWM",{"id":24195,"title":24196,"author":7,"body":24197,"category":1829,"description":24224,"extension":31,"image":24225,"isDraft":33,"isFeatured":34,"locale":35,"meta":24226,"navigation":33,"path":24231,"publishedAt":1838,"readingTime":1839,"seo":24232,"stem":24233,"tags":24234,"updatedAt":1838,"__hash__":24237},"articles_en/metis-mentoring-management-platform-case-study.md","Metis: All-in-One Mentoring Management Platform",{"type":9,"value":24198,"toc":24218},[24199,24202,24204,24206,24208,24210,24212,24214,24216],[12,24200,24201],{},"Exploring the development of Metis, an all-in-one solution for developers and professionals managing their mentoring business.",[16,24203,1801],{"id":1800},[12,24205,1804],{},[16,24207,1808],{"id":1807},[12,24209,1804],{},[16,24211,1814],{"id":1813},[12,24213,1804],{},[16,24215,1820],{"id":1819},[12,24217,1804],{},{"title":24,"searchDepth":25,"depth":25,"links":24219},[24220,24221,24222,24223],{"id":1800,"depth":28,"text":1801},{"id":1807,"depth":28,"text":1808},{"id":1813,"depth":28,"text":1814},{"id":1819,"depth":28,"text":1820},"Case study of Metis, a comprehensive platform for developers who do mentoring to manage schedules, clients, groups, and payments.","https://images.unsplash.com/photo-1531482615713-2afd69097998?q=80&w=1200&auto=format&fit=crop",{"excerpt":24227},{"type":9,"value":24228},[24229],[12,24230,24201],{},"/metis-mentoring-management-platform-case-study",{"title":24196,"description":24224},"metis-mentoring-management-platform-case-study",[1829,73,24235,10383,24236],"mentorship","management-tools","L7-eyeLlmJJOy3X58RSpEAcDnPydbW3waF_WtcSW12w",{"id":24239,"title":24240,"author":7,"body":24241,"category":2127,"description":74,"extension":31,"image":23580,"isDraft":33,"isFeatured":34,"locale":35,"meta":24253,"navigation":33,"path":24258,"publishedAt":23614,"readingTime":2382,"seo":24259,"stem":24260,"tags":24261,"updatedAt":23614,"__hash__":24263},"articles_en/pricing-strategies-for-digital-products.md","Pricing Strategies for Digital Products",{"type":9,"value":24242,"toc":24250},[24243,24246,24248],[12,24244,24245],{},"The right pricing strategy determines your digital product's market success.",[16,24247,19],{"id":18},[12,24249,22],{},{"title":24,"searchDepth":25,"depth":25,"links":24251},[24252],{"id":18,"depth":28,"text":19},{"excerpt":24254},{"type":9,"value":24255},[24256],[12,24257,24245],{},"/pricing-strategies-for-digital-products",{"title":24240,"description":74},"pricing-strategies-for-digital-products",[73,2127,24262,2110],"pricing","KAxS0ArvBT1hc6nFXZevDfzr1CUpYHGeBBrYh9FkwUo",{"id":24265,"title":24266,"author":7,"body":24267,"category":2127,"description":25933,"extension":31,"image":25934,"isDraft":34,"isFeatured":33,"locale":35,"meta":25935,"navigation":33,"path":25948,"publishedAt":1749,"readingTime":2449,"seo":25949,"stem":25950,"tags":25951,"updatedAt":10339,"__hash__":25957},"articles_en/product-management-for-developers.md","Product Management for Developers: Bridging the Gap to Build Better Products in 2025",{"type":9,"value":24268,"toc":25884},[24269,24283,24286,24290,24294,24297,24323,24327,24330,24335,24349,24354,24368,24374,24378,24381,24385,24390,24462,24467,24478,24483,24494,24498,24503,24665,24669,24672,24676,24681,24707,24713,24717,24731,24737,24741,24780,24784,24787,24791,24796,24810,24815,24829,24834,24848,24852,24857,24978,24982,24987,25218,25222,25226,25231,25257,25261,25266,25280,25285,25299,25303,25307,25317,25322,25337,25341,25346,25372,25376,25381,25392,25397,25408,25412,25416,25421,25427,25432,25443,25447,25452,25478,25483,25500,25504,25508,25513,25524,25529,25540,25545,25556,25560,25565,25579,25584,25603,25607,25611,25637,25640,25666,25669,25695,25699,25725,25729,25733,25738,25749,25754,25765,25770,25781,25785,25811,25815,25820,25834,25838,25841,25867,25870,25875,25881],[12,24270,24271,24272,24275,24276,10420,24279,24282],{},"In many tech organizations, developers and product managers work side-by-side, yet a functional or communication gap often exists between these critical roles. While developers focus on ",[6963,24273,24274],{},"how"," to build the product, product managers concentrate on the ",[6963,24277,24278],{},"what",[6963,24280,24281],{},"why",". When developers gain a deeper understanding of product management principles, it not only bridges this gap but also empowers them to contribute more effectively, build better products, and even open new career pathways.",[12,24284,24285],{},"This article explores how developers can benefit from embracing a product-oriented mindset in the AI-driven landscape of 2025.",[16,24287,24289],{"id":24288},"the-developer-pm-gap-why-it-matters-in-2025","The Developer-PM Gap: Why It Matters in 2025",[116,24291,24293],{"id":24292},"the-cost-of-misalignment","The Cost of Misalignment",[12,24295,24296],{},"In 2025, with AI tools accelerating development cycles and market competition fiercer than ever, the gap between development and product teams can be costly:",[190,24298,24299,24305,24311,24317],{},[193,24300,24301,24304],{},[397,24302,24303],{},"Delayed Releases:"," Features built without clear product vision often require expensive rewrites",[193,24306,24307,24310],{},[397,24308,24309],{},"Poor User Adoption:"," Technical solutions that don't solve real user problems",[193,24312,24313,24316],{},[397,24314,24315],{},"Team Friction:"," Misunderstandings that lead to frustration and turnover",[193,24318,24319,24322],{},[397,24320,24321],{},"Missed Opportunities:"," Slow response to market changes and user feedback",[116,24324,24326],{"id":24325},"the-ai-factor","The AI Factor",[12,24328,24329],{},"AI tools have transformed both development and product management:",[12,24331,24332],{},[397,24333,24334],{},"For Product Managers:",[190,24336,24337,24340,24343,24346],{},[193,24338,24339],{},"AI-powered user research and analytics",[193,24341,24342],{},"Automated A/B testing and experimentation",[193,24344,24345],{},"Predictive user behavior modeling",[193,24347,24348],{},"AI-assisted roadmap planning",[12,24350,24351],{},[397,24352,24353],{},"For Developers:",[190,24355,24356,24359,24362,24365],{},[193,24357,24358],{},"AI code generation and review",[193,24360,24361],{},"Automated testing and deployment",[193,24363,24364],{},"AI-powered debugging and optimization",[193,24366,24367],{},"Predictive maintenance and monitoring",[12,24369,24370,24373],{},[397,24371,24372],{},"The Opportunity:"," Developers who understand product principles can better leverage AI tools to create user-centric solutions.",[16,24375,24377],{"id":24376},"_1-understanding-the-user-the-core-of-product-thinking","1. Understanding the User: The Core of Product Thinking",[12,24379,24380],{},"Product management starts and ends with the user. Developers who cultivate empathy for their users and understand their pain points are better equipped to build features that truly resonate.",[116,24382,24384],{"id":24383},"user-research-techniques-for-developers","User Research Techniques for Developers",[12,24386,24387],{},[397,24388,24389],{},"Participate in User Interviews:",[2214,24391,24393],{"className":8398,"code":24392,"language":1930,"meta":24,"style":24},"// Example: Developer observing user interview\n// Instead of just building features, understand the \"why\"\nUser: \"I spend 30 minutes every day copying data between systems\"\nDeveloper: \"Why not automate this?\" → \"Because the systems don't talk to each other\"\nResult: Build integration instead of just another data entry form\n",[2220,24394,24395,24400,24405,24414,24430],{"__ignoreMap":24},[2223,24396,24397],{"class":2225,"line":2226},[2223,24398,24399],{"class":2312},"// Example: Developer observing user interview\n",[2223,24401,24402],{"class":2225,"line":28},[2223,24403,24404],{"class":2312},"// Instead of just building features, understand the \"why\"\n",[2223,24406,24407,24409,24411],{"class":2225,"line":25},[2223,24408,11187],{"class":5990},[2223,24410,3613],{"class":2328},[2223,24412,24413],{"class":2233},"\"I spend 30 minutes every day copying data between systems\"\n",[2223,24415,24416,24419,24421,24424,24427],{"class":2225,"line":2341},[2223,24417,24418],{"class":5990},"Developer",[2223,24420,3613],{"class":2328},[2223,24422,24423],{"class":2233},"\"Why not automate this?\"",[2223,24425,24426],{"class":2328}," → ",[2223,24428,24429],{"class":2233},"\"Because the systems don't talk to each other\"\n",[2223,24431,24432,24435,24437,24440,24443,24446,24448,24451,24454,24456,24459],{"class":2225,"line":336},[2223,24433,24434],{"class":5990},"Result",[2223,24436,3613],{"class":2328},[2223,24438,24439],{"class":2334},"Build",[2223,24441,24442],{"class":2334}," integration",[2223,24444,24445],{"class":2334}," instead",[2223,24447,14543],{"class":2900},[2223,24449,24450],{"class":2334}," just",[2223,24452,24453],{"class":2334}," another",[2223,24455,13178],{"class":2334},[2223,24457,24458],{"class":2334}," entry",[2223,24460,24461],{"class":2334}," form\n",[12,24463,24464],{},[397,24465,24466],{},"Create User Journey Maps:",[190,24468,24469,24472,24475],{},[193,24470,24471],{},"Map out the complete user experience",[193,24473,24474],{},"Identify pain points and opportunities",[193,24476,24477],{},"Validate technical assumptions against user reality",[12,24479,24480],{},[397,24481,24482],{},"Use Analytics Tools:",[190,24484,24485,24488,24491],{},[193,24486,24487],{},"Mixpanel, Amplitude, or PostHog for user behavior tracking",[193,24489,24490],{},"Understand user flows, drop-off points, and feature usage",[193,24492,24493],{},"Make data-driven technical decisions",[116,24495,24497],{"id":24496},"empathy-in-code","Empathy in Code",[12,24499,24500],{},[397,24501,24502],{},"Write User-Centric Code:",[2214,24504,24506],{"className":2303,"code":24505,"language":2305,"meta":24,"style":24},"// Bad: Technical-focused\nfunction processUserData(data: any) {\n  return data.filter(item => item.status === 'active')\n}\n\n// Good: User-focused\nfunction getActiveUserAccounts(allAccounts: UserAccount[]) {\n  // Filter accounts that users can actually access and use\n  return allAccounts.filter(account => \n    account.isActive && \n    account.hasValidSubscription && \n    !account.isSuspended\n  )\n}\n",[2220,24507,24508,24513,24530,24560,24564,24568,24573,24593,24598,24618,24632,24645,24657,24661],{"__ignoreMap":24},[2223,24509,24510],{"class":2225,"line":2226},[2223,24511,24512],{"class":2312},"// Bad: Technical-focused\n",[2223,24514,24515,24517,24520,24522,24524,24526,24528],{"class":2225,"line":28},[2223,24516,10753],{"class":2900},[2223,24518,24519],{"class":2229}," processUserData",[2223,24521,3001],{"class":2328},[2223,24523,3610],{"class":3131},[2223,24525,2300],{"class":2908},[2223,24527,14823],{"class":3137},[2223,24529,4444],{"class":2328},[2223,24531,24532,24534,24536,24538,24540,24542,24544,24546,24548,24550,24553,24555,24558],{"class":2225,"line":25},[2223,24533,3360],{"class":2318},[2223,24535,13178],{"class":2334},[2223,24537,260],{"class":2328},[2223,24539,3780],{"class":2229},[2223,24541,3001],{"class":2328},[2223,24543,16622],{"class":3131},[2223,24545,3788],{"class":2900},[2223,24547,17338],{"class":2334},[2223,24549,260],{"class":2328},[2223,24551,24552],{"class":2334},"status",[2223,24554,5697],{"class":2908},[2223,24556,24557],{"class":2233}," 'active'",[2223,24559,4947],{"class":2328},[2223,24561,24562],{"class":2225,"line":2341},[2223,24563,4487],{"class":2328},[2223,24565,24566],{"class":2225,"line":336},[2223,24567,2616],{"emptyLinePlaceholder":33},[2223,24569,24570],{"class":2225,"line":2357},[2223,24571,24572],{"class":2312},"// Good: User-focused\n",[2223,24574,24575,24577,24580,24582,24585,24587,24590],{"class":2225,"line":2363},[2223,24576,10753],{"class":2900},[2223,24578,24579],{"class":2229}," getActiveUserAccounts",[2223,24581,3001],{"class":2328},[2223,24583,24584],{"class":3131},"allAccounts",[2223,24586,2300],{"class":2908},[2223,24588,24589],{"class":3100}," UserAccount",[2223,24591,24592],{"class":2328},"[]) {\n",[2223,24594,24595],{"class":2225,"line":2074},[2223,24596,24597],{"class":2312},"  // Filter accounts that users can actually access and use\n",[2223,24599,24600,24602,24605,24607,24609,24611,24614,24616],{"class":2225,"line":43},[2223,24601,3360],{"class":2318},[2223,24603,24604],{"class":2334}," allAccounts",[2223,24606,260],{"class":2328},[2223,24608,3780],{"class":2229},[2223,24610,3001],{"class":2328},[2223,24612,24613],{"class":3131},"account",[2223,24615,3788],{"class":2900},[2223,24617,3765],{"class":2328},[2223,24619,24620,24623,24625,24628,24630],{"class":2225,"line":2382},[2223,24621,24622],{"class":2334},"    account",[2223,24624,260],{"class":2328},[2223,24626,24627],{"class":2334},"isActive",[2223,24629,15817],{"class":2908},[2223,24631,3765],{"class":2328},[2223,24633,24634,24636,24638,24641,24643],{"class":2225,"line":1784},[2223,24635,24622],{"class":2334},[2223,24637,260],{"class":2328},[2223,24639,24640],{"class":2334},"hasValidSubscription",[2223,24642,15817],{"class":2908},[2223,24644,3765],{"class":2328},[2223,24646,24647,24650,24652,24654],{"class":2225,"line":82},[2223,24648,24649],{"class":2908},"    !",[2223,24651,24613],{"class":2334},[2223,24653,260],{"class":2328},[2223,24655,24656],{"class":2334},"isSuspended\n",[2223,24658,24659],{"class":2225,"line":1432},[2223,24660,15099],{"class":2328},[2223,24662,24663],{"class":2225,"line":369},[2223,24664,4487],{"class":2328},[16,24666,24668],{"id":24667},"_2-mastering-prioritization-frameworks","2. Mastering Prioritization Frameworks",[12,24670,24671],{},"Product managers constantly juggle feature requests, bug fixes, and technical debt. Understanding prioritization helps developers align their efforts with business impact.",[116,24673,24675],{"id":24674},"rice-scoring-common-in-2025","RICE Scoring (Common in 2025)",[12,24677,24678],{},[397,24679,24680],{},"RICE = Reach × Impact × Confidence ÷ Effort",[190,24682,24683,24689,24695,24701],{},[193,24684,24685,24688],{},[397,24686,24687],{},"Reach:"," How many users will this affect? (Quantitative)",[193,24690,24691,24694],{},[397,24692,24693],{},"Impact:"," How much will it improve their experience? (High/Medium/Low)",[193,24696,24697,24700],{},[397,24698,24699],{},"Confidence:"," How sure are we about our estimates? (Percentage)",[193,24702,24703,24706],{},[397,24704,24705],{},"Effort:"," How many person-months will this take?",[12,24708,24709,24712],{},[397,24710,24711],{},"Developer's Role:"," Provide accurate effort estimates and technical feasibility insights.",[116,24714,24716],{"id":24715},"kano-model-for-feature-classification","Kano Model for Feature Classification",[12,24718,24719,24722,24723,24726,24727,24730],{},[397,24720,24721],{},"Must-Have Features:"," Basic expectations (payment processing works)\n",[397,24724,24725],{},"Performance Features:"," The better it works, the happier users are (faster load times)\n",[397,24728,24729],{},"Delighters:"," Unexpected features that wow users (surprise discounts)",[12,24732,24733,24736],{},[397,24734,24735],{},"Developer Insight:"," Focus technical debt work on \"must-haves\" that affect core user experience.",[116,24738,24740],{"id":24739},"opportunity-cost-thinking","Opportunity Cost Thinking",[2214,24742,24744],{"className":8398,"code":24743,"language":1930,"meta":24,"style":24},"// Instead of: \"This will take 2 weeks to build\"\n// Think: \"This 2-week project means we can't ship the user onboarding improvement\n// that would reduce churn by 15%\"\n\n// Developer Contribution:\n// \"We could reduce development time by 30% using this new AI tool,\n// freeing up time for higher-impact features\"\n",[2220,24745,24746,24751,24756,24761,24765,24770,24775],{"__ignoreMap":24},[2223,24747,24748],{"class":2225,"line":2226},[2223,24749,24750],{"class":2312},"// Instead of: \"This will take 2 weeks to build\"\n",[2223,24752,24753],{"class":2225,"line":28},[2223,24754,24755],{"class":2312},"// Think: \"This 2-week project means we can't ship the user onboarding improvement\n",[2223,24757,24758],{"class":2225,"line":25},[2223,24759,24760],{"class":2312},"// that would reduce churn by 15%\"\n",[2223,24762,24763],{"class":2225,"line":2341},[2223,24764,2616],{"emptyLinePlaceholder":33},[2223,24766,24767],{"class":2225,"line":336},[2223,24768,24769],{"class":2312},"// Developer Contribution:\n",[2223,24771,24772],{"class":2225,"line":2357},[2223,24773,24774],{"class":2312},"// \"We could reduce development time by 30% using this new AI tool,\n",[2223,24776,24777],{"class":2225,"line":2363},[2223,24778,24779],{"class":2312},"// freeing up time for higher-impact features\"\n",[16,24781,24783],{"id":24782},"_3-data-driven-development","3. Data-Driven Development",[12,24785,24786],{},"In 2025, successful products are built on data, not assumptions.",[116,24788,24790],{"id":24789},"key-metrics-developers-should-track","Key Metrics Developers Should Track",[12,24792,24793],{},[397,24794,24795],{},"User Engagement:",[190,24797,24798,24801,24804,24807],{},[193,24799,24800],{},"Daily/Monthly Active Users (DAU/MAU)",[193,24802,24803],{},"Session duration and frequency",[193,24805,24806],{},"Feature adoption rates",[193,24808,24809],{},"User retention curves",[12,24811,24812],{},[397,24813,24814],{},"Performance Metrics:",[190,24816,24817,24820,24823,24826],{},[193,24818,24819],{},"Page load times and Core Web Vitals",[193,24821,24822],{},"Error rates and crash frequency",[193,24824,24825],{},"API response times",[193,24827,24828],{},"Database query performance",[12,24830,24831],{},[397,24832,24833],{},"Business Metrics:",[190,24835,24836,24839,24842,24845],{},[193,24837,24838],{},"Conversion rates",[193,24840,24841],{},"Customer Acquisition Cost (CAC)",[193,24843,24844],{},"Customer Lifetime Value (LTV)",[193,24846,24847],{},"Churn rate",[116,24849,24851],{"id":24850},"ab-testing-for-developers","A/B Testing for Developers",[12,24853,24854],{},[397,24855,24856],{},"Framework for Testing Technical Changes:",[2214,24858,24860],{"className":2303,"code":24859,"language":2305,"meta":24,"style":24},"// Example: Testing a new caching strategy\ninterface ABTest {\n  name: 'cache_strategy_v2'\n  variants: {\n    control: 'redis_only',\n    treatment: 'redis_plus_cdn'\n  }\n  sampleSize: 10000,\n  metrics: ['response_time', 'error_rate', 'user_satisfaction']\n}\n\n// Developer implements both variants\n// Product team measures impact\n// Data drives the decision\n",[2220,24861,24862,24867,24876,24885,24894,24906,24916,24920,24931,24955,24959,24963,24968,24973],{"__ignoreMap":24},[2223,24863,24864],{"class":2225,"line":2226},[2223,24865,24866],{"class":2312},"// Example: Testing a new caching strategy\n",[2223,24868,24869,24871,24874],{"class":2225,"line":28},[2223,24870,12747],{"class":2900},[2223,24872,24873],{"class":3100}," ABTest",[2223,24875,2379],{"class":2328},[2223,24877,24878,24880,24882],{"class":2225,"line":25},[2223,24879,3265],{"class":3131},[2223,24881,2300],{"class":2908},[2223,24883,24884],{"class":2233}," 'cache_strategy_v2'\n",[2223,24886,24887,24890,24892],{"class":2225,"line":2341},[2223,24888,24889],{"class":3131},"  variants",[2223,24891,2300],{"class":2908},[2223,24893,2379],{"class":2328},[2223,24895,24896,24899,24901,24904],{"class":2225,"line":336},[2223,24897,24898],{"class":3131},"    control",[2223,24900,2300],{"class":2908},[2223,24902,24903],{"class":2233}," 'redis_only'",[2223,24905,2347],{"class":2328},[2223,24907,24908,24911,24913],{"class":2225,"line":2357},[2223,24909,24910],{"class":3131},"    treatment",[2223,24912,2300],{"class":2908},[2223,24914,24915],{"class":2233}," 'redis_plus_cdn'\n",[2223,24917,24918],{"class":2225,"line":2363},[2223,24919,2652],{"class":2328},[2223,24921,24922,24925,24927,24929],{"class":2225,"line":2074},[2223,24923,24924],{"class":3131},"  sampleSize",[2223,24926,2300],{"class":2908},[2223,24928,16345],{"class":4463},[2223,24930,2347],{"class":2328},[2223,24932,24933,24936,24938,24940,24943,24945,24948,24950,24953],{"class":2225,"line":43},[2223,24934,24935],{"class":3131},"  metrics",[2223,24937,2300],{"class":2908},[2223,24939,3727],{"class":2328},[2223,24941,24942],{"class":2233},"'response_time'",[2223,24944,269],{"class":2328},[2223,24946,24947],{"class":2233},"'error_rate'",[2223,24949,269],{"class":2328},[2223,24951,24952],{"class":2233},"'user_satisfaction'",[2223,24954,14505],{"class":2328},[2223,24956,24957],{"class":2225,"line":2382},[2223,24958,4487],{"class":2328},[2223,24960,24961],{"class":2225,"line":1784},[2223,24962,2616],{"emptyLinePlaceholder":33},[2223,24964,24965],{"class":2225,"line":82},[2223,24966,24967],{"class":2312},"// Developer implements both variants\n",[2223,24969,24970],{"class":2225,"line":1432},[2223,24971,24972],{"class":2312},"// Product team measures impact\n",[2223,24974,24975],{"class":2225,"line":369},[2223,24976,24977],{"class":2312},"// Data drives the decision\n",[116,24979,24981],{"id":24980},"instrumentation-best-practices","Instrumentation Best Practices",[12,24983,24984],{},[397,24985,24986],{},"Add Analytics from Day One:",[2214,24988,24990],{"className":8398,"code":24989,"language":1930,"meta":24,"style":24},"// Good: Instrument as you build\nfunction createUserAccount(userData) {\n  analytics.track('account_creation_started', {\n    source: 'web_app',\n    timestamp: Date.now()\n  })\n  \n  try {\n    const user = await db.createUser(userData)\n    analytics.track('account_creation_success', {\n      user_id: user.id,\n      time_to_create: Date.now() - startTime\n    })\n    return user\n  } catch (error) {\n    analytics.track('account_creation_failed', {\n      error_type: error.name,\n      error_message: error.message\n    })\n    throw error\n  }\n}\n",[2220,24991,24992,24997,25011,25028,25038,25051,25055,25059,25065,25089,25105,25118,25137,25141,25148,25160,25175,25188,25199,25203,25210,25214],{"__ignoreMap":24},[2223,24993,24994],{"class":2225,"line":2226},[2223,24995,24996],{"class":2312},"// Good: Instrument as you build\n",[2223,24998,24999,25001,25004,25006,25009],{"class":2225,"line":28},[2223,25000,10753],{"class":2900},[2223,25002,25003],{"class":2229}," createUserAccount",[2223,25005,3001],{"class":2328},[2223,25007,25008],{"class":3131},"userData",[2223,25010,4444],{"class":2328},[2223,25012,25013,25016,25018,25021,25023,25026],{"class":2225,"line":25},[2223,25014,25015],{"class":2334},"  analytics",[2223,25017,260],{"class":2328},[2223,25019,25020],{"class":2229},"track",[2223,25022,3001],{"class":2328},[2223,25024,25025],{"class":2233},"'account_creation_started'",[2223,25027,17940],{"class":2328},[2223,25029,25030,25033,25036],{"class":2225,"line":2341},[2223,25031,25032],{"class":2334},"    source:",[2223,25034,25035],{"class":2233}," 'web_app'",[2223,25037,2347],{"class":2328},[2223,25039,25040,25042,25044,25046,25049],{"class":2225,"line":336},[2223,25041,20406],{"class":2334},[2223,25043,20411],{"class":2334},[2223,25045,260],{"class":2328},[2223,25047,25048],{"class":2229},"now",[2223,25050,4389],{"class":2328},[2223,25052,25053],{"class":2225,"line":2357},[2223,25054,17573],{"class":2328},[2223,25056,25057],{"class":2225,"line":2363},[2223,25058,2371],{"class":2328},[2223,25060,25061,25063],{"class":2225,"line":2074},[2223,25062,11712],{"class":2318},[2223,25064,2379],{"class":2328},[2223,25066,25067,25069,25071,25073,25075,25078,25080,25083,25085,25087],{"class":2225,"line":43},[2223,25068,3673],{"class":2900},[2223,25070,10559],{"class":2904},[2223,25072,2909],{"class":2908},[2223,25074,3623],{"class":2318},[2223,25076,25077],{"class":2334}," db",[2223,25079,260],{"class":2328},[2223,25081,25082],{"class":2229},"createUser",[2223,25084,3001],{"class":2328},[2223,25086,25008],{"class":2334},[2223,25088,4947],{"class":2328},[2223,25090,25091,25094,25096,25098,25100,25103],{"class":2225,"line":2382},[2223,25092,25093],{"class":2334},"    analytics",[2223,25095,260],{"class":2328},[2223,25097,25020],{"class":2229},[2223,25099,3001],{"class":2328},[2223,25101,25102],{"class":2233},"'account_creation_success'",[2223,25104,17940],{"class":2328},[2223,25106,25107,25110,25112,25114,25116],{"class":2225,"line":1784},[2223,25108,25109],{"class":2334},"      user_id:",[2223,25111,10559],{"class":2334},[2223,25113,260],{"class":2328},[2223,25115,12874],{"class":2334},[2223,25117,2347],{"class":2328},[2223,25119,25120,25123,25125,25127,25129,25132,25134],{"class":2225,"line":82},[2223,25121,25122],{"class":2334},"      time_to_create:",[2223,25124,20411],{"class":2334},[2223,25126,260],{"class":2328},[2223,25128,25048],{"class":2229},[2223,25130,25131],{"class":2328},"() ",[2223,25133,5253],{"class":2908},[2223,25135,25136],{"class":2334}," startTime\n",[2223,25138,25139],{"class":2225,"line":1432},[2223,25140,17986],{"class":2328},[2223,25142,25143,25145],{"class":2225,"line":369},[2223,25144,3696],{"class":2318},[2223,25146,25147],{"class":2334}," user\n",[2223,25149,25150,25152,25154,25156,25158],{"class":2225,"line":2425},[2223,25151,11744],{"class":2328},[2223,25153,11386],{"class":2318},[2223,25155,3340],{"class":2328},[2223,25157,11391],{"class":2334},[2223,25159,4444],{"class":2328},[2223,25161,25162,25164,25166,25168,25170,25173],{"class":2225,"line":1750},[2223,25163,25093],{"class":2334},[2223,25165,260],{"class":2328},[2223,25167,25020],{"class":2229},[2223,25169,3001],{"class":2328},[2223,25171,25172],{"class":2233},"'account_creation_failed'",[2223,25174,17940],{"class":2328},[2223,25176,25177,25180,25182,25184,25186],{"class":2225,"line":2105},[2223,25178,25179],{"class":2334},"      error_type:",[2223,25181,13203],{"class":2334},[2223,25183,260],{"class":2328},[2223,25185,167],{"class":2334},[2223,25187,2347],{"class":2328},[2223,25189,25190,25193,25195,25197],{"class":2225,"line":2449},[2223,25191,25192],{"class":2334},"      error_message:",[2223,25194,13203],{"class":2334},[2223,25196,260],{"class":2328},[2223,25198,14597],{"class":2334},[2223,25200,25201],{"class":2225,"line":2454},[2223,25202,17986],{"class":2328},[2223,25204,25205,25208],{"class":2225,"line":1839},[2223,25206,25207],{"class":2318},"    throw",[2223,25209,11421],{"class":2334},[2223,25211,25212],{"class":2225,"line":2473},[2223,25213,2652],{"class":2328},[2223,25215,25216],{"class":2225,"line":2483},[2223,25217,4487],{"class":2328},[16,25219,25221],{"id":25220},"_4-product-strategy-and-roadmap-planning","4. Product Strategy and Roadmap Planning",[116,25223,25225],{"id":25224},"understanding-product-strategy","Understanding Product Strategy",[12,25227,25228],{},[397,25229,25230],{},"Vision → Strategy → Roadmap → Features",[190,25232,25233,25239,25245,25251],{},[193,25234,25235,25238],{},[397,25236,25237],{},"Product Vision:"," Long-term goal (e.g., \"Democratize AI for small businesses\")",[193,25240,25241,25244],{},[397,25242,25243],{},"Strategy:"," How to achieve it (e.g., \"Build no-code AI tools\")",[193,25246,25247,25250],{},[397,25248,25249],{},"Roadmap:"," 12-18 month plan with themes and milestones",[193,25252,25253,25256],{},[397,25254,25255],{},"Features:"," Individual capabilities that support the strategy",[116,25258,25260],{"id":25259},"developer-contributions-to-strategy","Developer Contributions to Strategy",[12,25262,25263],{},[397,25264,25265],{},"Technical Strategy Input:",[190,25267,25268,25271,25274,25277],{},[193,25269,25270],{},"Platform choices and their strategic implications",[193,25272,25273],{},"Scalability considerations for growth targets",[193,25275,25276],{},"Technical debt impact on roadmap velocity",[193,25278,25279],{},"Emerging technology opportunities (AI, Web3, etc.)",[12,25281,25282],{},[397,25283,25284],{},"Risk Assessment:",[190,25286,25287,25290,25293,25296],{},[193,25288,25289],{},"Technical risks that could derail roadmap",[193,25291,25292],{},"Dependencies on third-party services",[193,25294,25295],{},"Security and compliance requirements",[193,25297,25298],{},"Team capacity and hiring needs",[16,25300,25302],{"id":25301},"_5-modern-product-development-practices","5. Modern Product Development Practices",[116,25304,25306],{"id":25305},"agile-vs-product-led-development","Agile vs. Product-Led Development",[12,25308,25309,25312,25313,25316],{},[397,25310,25311],{},"Traditional Agile:"," Time-boxed sprints, predictable delivery\n",[397,25314,25315],{},"Product-Led:"," Outcome-focused, adaptive to user feedback",[12,25318,25319],{},[397,25320,25321],{},"Developer Mindset Shift:",[2214,25323,25325],{"className":8398,"code":25324,"language":1930,"meta":24,"style":24},"// Old: \"Complete these 5 story points this sprint\"\n// New: \"How can we learn what users really need this iteration?\"\n",[2220,25326,25327,25332],{"__ignoreMap":24},[2223,25328,25329],{"class":2225,"line":2226},[2223,25330,25331],{"class":2312},"// Old: \"Complete these 5 story points this sprint\"\n",[2223,25333,25334],{"class":2225,"line":28},[2223,25335,25336],{"class":2312},"// New: \"How can we learn what users really need this iteration?\"\n",[116,25338,25340],{"id":25339},"continuous-discovery","Continuous Discovery",[12,25342,25343],{},[397,25344,25345],{},"Build → Measure → Learn → Repeat",[190,25347,25348,25354,25360,25366],{},[193,25349,25350,25353],{},[397,25351,25352],{},"User Interviews:"," Regular conversations with users",[193,25355,25356,25359],{},[397,25357,25358],{},"Usability Testing:"," Watch users interact with your product",[193,25361,25362,25365],{},[397,25363,25364],{},"Analytics Review:"," Weekly data deep-dives",[193,25367,25368,25371],{},[397,25369,25370],{},"Competitive Analysis:"," Regular competitor reviews",[116,25373,25375],{"id":25374},"developer-led-product-initiatives","Developer-Led Product Initiatives",[12,25377,25378],{},[397,25379,25380],{},"\"Developer Products\" Success Stories:",[190,25382,25383,25386,25389],{},[193,25384,25385],{},"Stripe's developer experience led to massive adoption",[193,25387,25388],{},"Vercel's DX innovations disrupted hosting",[193,25390,25391],{},"Linear's developer-focused design won the market",[12,25393,25394],{},[397,25395,25396],{},"How to Contribute:",[190,25398,25399,25402,25405],{},[193,25400,25401],{},"Build internal tools that could be products",[193,25403,25404],{},"Create developer documentation that becomes marketing",[193,25406,25407],{},"Solve your own pain points in reusable ways",[16,25409,25411],{"id":25410},"_6-communication-and-collaboration","6. Communication and Collaboration",[116,25413,25415],{"id":25414},"effective-product-conversations","Effective Product Conversations",[12,25417,25418],{},[397,25419,25420],{},"Instead of Technical Jargon:",[2214,25422,25425],{"className":25423,"code":25424,"language":2671},[2669],"❌ \"We need to refactor the microservices architecture\"\n✅ \"This change will let us ship new features 40% faster, \n    reducing time-to-market for user requests from 3 weeks to 1 week\"\n",[2220,25426,25424],{"__ignoreMap":24},[12,25428,25429],{},[397,25430,25431],{},"Bridge Communication Gaps:",[190,25433,25434,25437,25440],{},[193,25435,25436],{},"Learn product terminology (MVP, KPI, retention, churn)",[193,25438,25439],{},"Understand business metrics (CAC, LTV, ARR)",[193,25441,25442],{},"Practice explaining technical concepts in business terms",[116,25444,25446],{"id":25445},"cross-functional-collaboration","Cross-Functional Collaboration",[12,25448,25449],{},[397,25450,25451],{},"Product-Dev Handoff Best Practices:",[190,25453,25454,25460,25466,25472],{},[193,25455,25456,25459],{},[397,25457,25458],{},"Story Writing:"," Clear, testable acceptance criteria",[193,25461,25462,25465],{},[397,25463,25464],{},"Design Reviews:"," Early feedback on technical feasibility",[193,25467,25468,25471],{},[397,25469,25470],{},"Planning Poker:"," Collaborative effort estimation",[193,25473,25474,25477],{},[397,25475,25476],{},"Demo Days:"," Regular showcases of working software",[12,25479,25480],{},[397,25481,25482],{},"Tools for Collaboration (2025):",[190,25484,25485,25488,25491,25494,25497],{},[193,25486,25487],{},"Linear or Jira for issue tracking",[193,25489,25490],{},"Figma for design collaboration",[193,25492,25493],{},"Notion for documentation",[193,25495,25496],{},"Slack/Teams for communication",[193,25498,25499],{},"Zoom for async standups",[16,25501,25503],{"id":25502},"_7-career-growth-opportunities","7. Career Growth Opportunities",[116,25505,25507],{"id":25506},"technical-leadership-paths","Technical Leadership Paths",[12,25509,25510],{},[397,25511,25512],{},"Technical Program Manager (TPM):",[190,25514,25515,25518,25521],{},[193,25516,25517],{},"Bridge between engineering and product",[193,25519,25520],{},"Program execution and delivery",[193,25522,25523],{},"Cross-team coordination",[12,25525,25526],{},[397,25527,25528],{},"Engineering Manager:",[190,25530,25531,25534,25537],{},[193,25532,25533],{},"Team leadership with product context",[193,25535,25536],{},"Resource planning and prioritization",[193,25538,25539],{},"Stakeholder management",[12,25541,25542],{},[397,25543,25544],{},"Product-Minded Architect:",[190,25546,25547,25550,25553],{},[193,25548,25549],{},"System design with user and business impact",[193,25551,25552],{},"Technology strategy aligned with product goals",[193,25554,25555],{},"Platform decisions that enable product vision",[116,25557,25559],{"id":25558},"transitioning-to-product-management","Transitioning to Product Management",[12,25561,25562],{},[397,25563,25564],{},"Skills to Develop:",[190,25566,25567,25570,25573,25576],{},[193,25568,25569],{},"User research and data analysis",[193,25571,25572],{},"Market analysis and competitive research",[193,25574,25575],{},"Stakeholder management and communication",[193,25577,25578],{},"Business case development and ROI analysis",[12,25580,25581],{},[397,25582,25583],{},"Pathway:",[675,25585,25586,25592,25597],{},[193,25587,25588,25591],{},[397,25589,25590],{},"Individual Contributor → Tech Lead"," (2-3 years)",[193,25593,25594,25591],{},[397,25595,25596],{},"Tech Lead → Engineering Manager",[193,25598,25599,25602],{},[397,25600,25601],{},"Engineering Manager → Product Manager"," (1-2 years with additional training)",[16,25604,25606],{"id":25605},"_8-ai-tools-for-product-minded-developers","8. AI Tools for Product-Minded Developers",[116,25608,25610],{"id":25609},"research-and-analytics","Research and Analytics",[190,25612,25613,25619,25625,25631],{},[193,25614,25615,25618],{},[397,25616,25617],{},"Mixpanel/Amplitude:"," User behavior analytics",[193,25620,25621,25624],{},[397,25622,25623],{},"Hotjar:"," Session recordings and heatmaps",[193,25626,25627,25630],{},[397,25628,25629],{},"UserTesting:"," Remote usability testing",[193,25632,25633,25636],{},[397,25634,25635],{},"Looker/Tableau:"," Data visualization and business intelligence",[116,25638,25639],{"id":23144},"User Research",[190,25641,25642,25648,25654,25660],{},[193,25643,25644,25647],{},[397,25645,25646],{},"Dovetail:"," Qualitative data analysis",[193,25649,25650,25653],{},[397,25651,25652],{},"Optimal Workshop:"," Card sorting and tree testing",[193,25655,25656,25659],{},[397,25657,25658],{},"Maze:"," Remote user testing platform",[193,25661,25662,25665],{},[397,25663,25664],{},"FigJam:"," Collaborative brainstorming and research synthesis",[116,25667,25668],{"id":2127},"Product Management",[190,25670,25671,25677,25683,25689],{},[193,25672,25673,25676],{},[397,25674,25675],{},"Productboard:"," Feature management and roadmapping",[193,25678,25679,25682],{},[397,25680,25681],{},"Aha!:"," Product strategy and roadmap planning",[193,25684,25685,25688],{},[397,25686,25687],{},"Pendo:"," In-product guidance and adoption analytics",[193,25690,25691,25694],{},[397,25692,25693],{},"Canny:"," User feedback and feature request management",[116,25696,25698],{"id":25697},"ai-powered-tools","AI-Powered Tools",[190,25700,25701,25707,25713,25719],{},[193,25702,25703,25706],{},[397,25704,25705],{},"ChatGPT/Claude:"," User interview analysis, copywriting",[193,25708,25709,25712],{},[397,25710,25711],{},"Jasper/Copy.ai:"," Product messaging and documentation",[193,25714,25715,25718],{},[397,25716,25717],{},"Obviously.ai:"," Automated A/B testing",[193,25720,25721,25724],{},[397,25722,25723],{},"UserTesting AI:"," Automated usability insights",[16,25726,25728],{"id":25727},"practical-implementation-guide","Practical Implementation Guide",[116,25730,25732],{"id":25731},"weekly-product-habits-for-developers","Weekly Product Habits for Developers",[12,25734,25735],{},[397,25736,25737],{},"Monday: Product Review",[190,25739,25740,25743,25746],{},[193,25741,25742],{},"Review product metrics and user feedback",[193,25744,25745],{},"Align sprint goals with product objectives",[193,25747,25748],{},"Flag any product concerns early",[12,25750,25751],{},[397,25752,25753],{},"Wednesday: User Focus",[190,25755,25756,25759,25762],{},[193,25757,25758],{},"Review user research or analytics",[193,25760,25761],{},"Consider user impact in technical decisions",[193,25763,25764],{},"Suggest user experience improvements",[12,25766,25767],{},[397,25768,25769],{},"Friday: Retrospective",[190,25771,25772,25775,25778],{},[193,25773,25774],{},"What product learnings from this week?",[193,25776,25777],{},"How did technical decisions affect users?",[193,25779,25780],{},"What product context influenced development?",[116,25782,25784],{"id":25783},"monthly-growth-activities","Monthly Growth Activities",[190,25786,25787,25793,25799,25805],{},[193,25788,25789,25792],{},[397,25790,25791],{},"Read Product Books:"," \"Inspired\" by Marty Cagan, \"The Lean Product Playbook\"",[193,25794,25795,25798],{},[397,25796,25797],{},"Take Online Courses:"," Product Management courses on Coursera/Udemy",[193,25800,25801,25804],{},[397,25802,25803],{},"Shadow Product Managers:"," Observe their decision-making process",[193,25806,25807,25810],{},[397,25808,25809],{},"Conduct User Interviews:"," Practice empathy and user understanding",[116,25812,25814],{"id":25813},"measuring-your-product-growth","Measuring Your Product Growth",[12,25816,25817],{},[397,25818,25819],{},"Personal KPIs:",[190,25821,25822,25825,25828,25831],{},[193,25823,25824],{},"Features shipped that improved user metrics",[193,25826,25827],{},"Product feedback incorporated into development",[193,25829,25830],{},"Cross-functional initiatives led",[193,25832,25833],{},"Product knowledge demonstrated in code reviews",[16,25835,25837],{"id":25836},"conclusion-the-product-minded-developer-advantage","Conclusion: The Product-Minded Developer Advantage",[12,25839,25840],{},"In 2025, the most successful developers are those who understand that great code serves a greater purpose: solving user problems and driving business value. By embracing product management principles, developers become more than engineers—they become product builders who can:",[190,25842,25843,25849,25855,25861],{},[193,25844,25845,25848],{},[397,25846,25847],{},"Build what matters:"," Features that users actually need and love",[193,25850,25851,25854],{},[397,25852,25853],{},"Communicate effectively:"," Bridge gaps between technical and business teams",[193,25856,25857,25860],{},[397,25858,25859],{},"Drive impact:"," Make decisions that balance technical excellence with user value",[193,25862,25863,25866],{},[397,25864,25865],{},"Accelerate careers:"," Open pathways to leadership and product roles",[12,25868,25869],{},"The gap between development and product management isn't a divide to be managed—it's an opportunity to be bridged. Developers who learn to think like product managers don't just write better code; they build better products and create more fulfilling careers.",[12,25871,25872,25874],{},[397,25873,9320],{}," Pick one product principle this week and apply it to your work. The compound effect of product thinking will transform both your code and your career trajectory.",[12,25876,25877,25880],{},[397,25878,25879],{},"Ready to bridge the gap? Your first user interview awaits."," 🤝",[6642,25882,25883],{},"html pre.shiki code .s56mj, html code.shiki .s56mj{--shiki-light:#6A737D;--shiki-default:#6A9955;--shiki-dark:#6A9955}html pre.shiki code .sGRYn, html code.shiki .sGRYn{--shiki-light:#6F42C1;--shiki-default:#C8C8C8;--shiki-dark:#C8C8C8}html pre.shiki code .sG4b4, html code.shiki .sG4b4{--shiki-light:#24292E;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .sGDl4, html code.shiki .sGDl4{--shiki-light:#032F62;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .sZiGn, html code.shiki .sZiGn{--shiki-light:#24292E;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .s5uUr, html code.shiki .s5uUr{--shiki-light:#D73A49;--shiki-default:#569CD6;--shiki-dark:#569CD6}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 .svuFb, html code.shiki .svuFb{--shiki-light:#6F42C1;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}html pre.shiki code .s9TRk, html code.shiki .s9TRk{--shiki-light:#E36209;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .s1p9p, html code.shiki .s1p9p{--shiki-light:#D73A49;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .s6-XD, html code.shiki .s6-XD{--shiki-light:#005CC5;--shiki-default:#4EC9B0;--shiki-dark:#4EC9B0}html pre.shiki code .sEkCa, html code.shiki .sEkCa{--shiki-light:#D73A49;--shiki-default:#C586C0;--shiki-dark:#C586C0}html pre.shiki code .su_XB, html code.shiki .su_XB{--shiki-light:#6F42C1;--shiki-default:#4EC9B0;--shiki-dark:#4EC9B0}html pre.shiki code .seC34, html code.shiki .seC34{--shiki-light:#005CC5;--shiki-default:#B5CEA8;--shiki-dark:#B5CEA8}html pre.shiki code .sToQf, html code.shiki .sToQf{--shiki-light:#005CC5;--shiki-default:#4FC1FF;--shiki-dark:#4FC1FF}",{"title":24,"searchDepth":25,"depth":25,"links":25885},[25886,25890,25894,25899,25904,25908,25913,25917,25921,25927,25932],{"id":24288,"depth":28,"text":24289,"children":25887},[25888,25889],{"id":24292,"depth":25,"text":24293},{"id":24325,"depth":25,"text":24326},{"id":24376,"depth":28,"text":24377,"children":25891},[25892,25893],{"id":24383,"depth":25,"text":24384},{"id":24496,"depth":25,"text":24497},{"id":24667,"depth":28,"text":24668,"children":25895},[25896,25897,25898],{"id":24674,"depth":25,"text":24675},{"id":24715,"depth":25,"text":24716},{"id":24739,"depth":25,"text":24740},{"id":24782,"depth":28,"text":24783,"children":25900},[25901,25902,25903],{"id":24789,"depth":25,"text":24790},{"id":24850,"depth":25,"text":24851},{"id":24980,"depth":25,"text":24981},{"id":25220,"depth":28,"text":25221,"children":25905},[25906,25907],{"id":25224,"depth":25,"text":25225},{"id":25259,"depth":25,"text":25260},{"id":25301,"depth":28,"text":25302,"children":25909},[25910,25911,25912],{"id":25305,"depth":25,"text":25306},{"id":25339,"depth":25,"text":25340},{"id":25374,"depth":25,"text":25375},{"id":25410,"depth":28,"text":25411,"children":25914},[25915,25916],{"id":25414,"depth":25,"text":25415},{"id":25445,"depth":25,"text":25446},{"id":25502,"depth":28,"text":25503,"children":25918},[25919,25920],{"id":25506,"depth":25,"text":25507},{"id":25558,"depth":25,"text":25559},{"id":25605,"depth":28,"text":25606,"children":25922},[25923,25924,25925,25926],{"id":25609,"depth":25,"text":25610},{"id":23144,"depth":25,"text":25639},{"id":2127,"depth":25,"text":25668},{"id":25697,"depth":25,"text":25698},{"id":25727,"depth":28,"text":25728,"children":25928},[25929,25930,25931],{"id":25731,"depth":25,"text":25732},{"id":25783,"depth":25,"text":25784},{"id":25813,"depth":25,"text":25814},{"id":25836,"depth":28,"text":25837},"A comprehensive guide for software developers on how understanding product management principles can enhance collaboration, improve product outcomes, and accelerate career growth. Includes modern tools, AI integration, and 2025 market insights.","https://images.unsplash.com/photo-1556761175-5973dc0f32e7?auto=format&fit=crop&w=1200&q=80",{"excerpt":25936},{"type":9,"value":25937},[25938,25946],[12,25939,24271,25940,24275,25942,10420,25944,24282],{},[6963,25941,24274],{},[6963,25943,24278],{},[6963,25945,24281],{},[12,25947,24285],{},"/product-management-for-developers",{"title":24266,"description":25933},"product-management-for-developers",[2127,373,25952,25953,25954,25955,10337,25956],"collaboration","skills","software-engineering","career-growth","data-driven","EA9Nf6hq7iSLAtnJjR60udAu1OI85IBuj_9wFOF7-lU",{"id":25959,"title":25960,"author":7,"body":25961,"category":2127,"description":26952,"extension":31,"image":25934,"isDraft":34,"isFeatured":33,"locale":35,"meta":26953,"navigation":33,"path":26960,"publishedAt":10330,"readingTime":2449,"seo":26961,"stem":26962,"tags":26963,"updatedAt":10339,"__hash__":26967},"articles_en/product-management-tips.md","10 Essential Product Management Tips for Thriving in a Startup Environment (2025)",{"type":9,"value":25962,"toc":26914},[25963,25966,25969,25973,25976,25980,25985,25996,26001,26012,26017,26028,26033,26037,26040,26044,26049,26055,26060,26071,26076,26087,26091,26094,26098,26103,26114,26119,26130,26135,26146,26151,26171,26175,26178,26182,26187,26192,26203,26208,26219,26224,26235,26240,26264,26268,26273,26299,26304,26318,26322,26325,26329,26334,26348,26352,26363,26368,26379,26383,26386,26390,26403,26407,26412,26426,26431,26442,26446,26449,26453,26458,26496,26501,26527,26531,26536,26547,26552,26563,26567,26570,26574,26579,26590,26595,26606,26611,26625,26629,26632,26636,26641,26657,26662,26682,26687,26706,26710,26715,26729,26734,26748,26752,26755,26759,26764,26775,26780,26791,26796,26807,26811,26816,26842,26847,26861,26865,26868,26900,26903,26908],[12,25964,25965],{},"Product management in a startup is a vastly different beast compared to established corporations. Resources are scarce, speed is paramount, and the ability to adapt to a rapidly changing landscape is crucial. Startup product managers often wear multiple hats and operate with a high degree of uncertainty. In 2025, with AI tools transforming the landscape, the role has evolved even further.",[12,25967,25968],{},"To not just survive but thrive in this dynamic environment, here are ten essential tips that incorporate modern tools and methodologies:",[16,25970,25972],{"id":25971},"_1-deeply-understand-your-users-and-their-core-problems","1. Deeply Understand Your Users and Their Core Problems",[12,25974,25975],{},"In a startup, you don't have the luxury of catering to a broad market initially. Your survival depends on solving a specific, painful problem for a well-defined niche of early adopters.",[116,25977,25979],{"id":25978},"modern-user-research-techniques-2025","Modern User Research Techniques (2025)",[12,25981,25982],{},[397,25983,25984],{},"AI-Powered User Insights:",[190,25986,25987,25990,25993],{},[193,25988,25989],{},"Use tools like UserTesting AI for automated usability testing",[193,25991,25992],{},"Leverage ChatGPT for analyzing user interview transcripts",[193,25994,25995],{},"Implement automated sentiment analysis on support tickets",[12,25997,25998],{},[397,25999,26000],{},"Continuous Discovery:",[190,26002,26003,26006,26009],{},[193,26004,26005],{},"Set up user interview pipelines (aim for 2-3 interviews per week)",[193,26007,26008],{},"Create user journey maps with real behavioral data",[193,26010,26011],{},"Use heatmaps and session recordings (Hotjar, FullStory) for quantitative insights",[12,26013,26014],{},[397,26015,26016],{},"Lean Validation:",[190,26018,26019,26022,26025],{},[193,26020,26021],{},"One-week experiments instead of three-month projects",[193,26023,26024],{},"Fake door testing for feature interest",[193,26026,26027],{},"Landing page A/B tests to validate problem-solution fit",[12,26029,26030,26032],{},[397,26031,482],{}," Create a \"user story bank\" - a living document of validated user problems that becomes your product roadmap foundation.",[16,26034,26036],{"id":26035},"_2-practice-ruthless-prioritization-focus-is-your-superpower","2. Practice Ruthless Prioritization: Focus is Your Superpower",[12,26038,26039],{},"Startups are always resource-constrained (time, money, people). Trying to do too much too soon is a common recipe for failure. Effective prioritization is non-negotiable.",[116,26041,26043],{"id":26042},"advanced-prioritization-frameworks","Advanced Prioritization Frameworks",[12,26045,26046],{},[397,26047,26048],{},"RICE Scoring in Practice:",[2214,26050,26053],{"className":26051,"code":26052,"language":2671},[2669],"RICE = (Reach × Impact × Confidence) ÷ Effort\n\nExample Feature: \"Dark Mode\"\n- Reach: 40% of users (400 users)\n- Impact: High (3.0 - significantly improves UX)\n- Confidence: 80% (0.8 - based on user feedback)\n- Effort: 2 weeks (2 person-weeks)\n\nRICE Score: (400 × 3.0 × 0.8) ÷ 2 = 480\n",[2220,26054,26052],{"__ignoreMap":24},[12,26056,26057],{},[397,26058,26059],{},"Opportunity Cost Thinking:",[190,26061,26062,26065,26068],{},[193,26063,26064],{},"Every \"yes\" to a feature is a \"no\" to something else",[193,26066,26067],{},"Calculate the cost of delay for high-priority items",[193,26069,26070],{},"Use the Eisenhower Matrix for daily task management",[12,26072,26073],{},[397,26074,26075],{},"North Star Metric Focus:",[190,26077,26078,26081,26084],{},[193,26079,26080],{},"Choose ONE metric that represents product success",[193,26082,26083],{},"Align all prioritization decisions with this metric",[193,26085,26086],{},"Example: For a B2B SaaS tool, it might be \"Daily Active Users in Power Users\"",[16,26088,26090],{"id":26089},"_3-communicate-effectively-and-foster-alignment","3. Communicate Effectively and Foster Alignment",[12,26092,26093],{},"In the fast-paced, often chaotic startup environment, clear, consistent, and transparent communication is vital to keep everyone rowing in the same direction.",[116,26095,26097],{"id":26096},"modern-communication-tools-and-techniques","Modern Communication Tools and Techniques",[12,26099,26100],{},[397,26101,26102],{},"Asynchronous-First Communication:",[190,26104,26105,26108,26111],{},[193,26106,26107],{},"Use Notion or Coda for living product documentation",[193,26109,26110],{},"Record Loom videos for complex explanations",[193,26112,26113],{},"Implement \"working backwards\" from PRDs (Product Requirements Documents)",[12,26115,26116],{},[397,26117,26118],{},"Stakeholder Management:",[190,26120,26121,26124,26127],{},[193,26122,26123],{},"Create product update newsletters (weekly or bi-weekly)",[193,26125,26126],{},"Use tools like Productboard for feature request management",[193,26128,26129],{},"Implement feedback loops with engineering and design teams",[12,26131,26132],{},[397,26133,26134],{},"Cross-Functional Alignment:",[190,26136,26137,26140,26143],{},[193,26138,26139],{},"Regular \"product office hours\" for ad-hoc questions",[193,26141,26142],{},"Shared dashboards showing product metrics and roadmap progress",[193,26144,26145],{},"\"Readiness reviews\" before starting development",[12,26147,26148],{},[397,26149,26150],{},"Communication Frameworks:",[190,26152,26153,26159,26165],{},[193,26154,26155,26158],{},[397,26156,26157],{},"BLUF (Bottom Line Up Front):"," Start with the conclusion",[193,26160,26161,26164],{},[397,26162,26163],{},"Situation-Complication-Resolution:"," For complex problems",[193,26166,26167,26170],{},[397,26168,26169],{},"Data-Insight-Action:"," For data-driven decisions",[16,26172,26174],{"id":26173},"_4-measure-what-matters-and-make-data-informed-decisions","4. Measure What Matters and Make Data-Informed Decisions",[12,26176,26177],{},"While intuition plays a role, relying solely on gut feelings can be risky. Startups need to be data-informed to learn quickly and iterate effectively.",[116,26179,26181],{"id":26180},"_2025-analytics-and-measurement-tools","2025 Analytics and Measurement Tools",[12,26183,26184],{},[397,26185,26186],{},"Essential Metrics by Startup Stage:",[12,26188,26189],{},[397,26190,26191],{},"Pre-Product (Problem Validation):",[190,26193,26194,26197,26200],{},[193,26195,26196],{},"Problem validation: User interview conversion rates",[193,26198,26199],{},"Interest validation: Email signup rates, waitlist growth",[193,26201,26202],{},"Market validation: Competitor analysis, market size estimates",[12,26204,26205],{},[397,26206,26207],{},"MVP Stage:",[190,26209,26210,26213,26216],{},[193,26211,26212],{},"Product-Market Fit: Retention curves, usage frequency",[193,26214,26215],{},"Engagement: Time to first value, feature adoption rates",[193,26217,26218],{},"Quality: Crash rates, support ticket volume",[12,26220,26221],{},[397,26222,26223],{},"Growth Stage:",[190,26225,26226,26229,26232],{},[193,26227,26228],{},"Business metrics: Revenue per user, customer acquisition cost",[193,26230,26231],{},"Product metrics: Feature usage, user segmentation",[193,26233,26234],{},"Operational: Development velocity, deployment frequency",[12,26236,26237],{},[397,26238,26239],{},"Modern Analytics Stack:",[190,26241,26242,26247,26253,26258],{},[193,26243,26244,25618],{},[397,26245,26246],{},"Amplitude/Mixpanel:",[193,26248,26249,26252],{},[397,26250,26251],{},"PostHog:"," Product analytics with A/B testing",[193,26254,26255,26257],{},[397,26256,25635],{}," Business intelligence dashboards",[193,26259,26260,26263],{},[397,26261,26262],{},"Google Analytics 4:"," Web analytics with enhanced e-commerce tracking",[116,26265,26267],{"id":26266},"ab-testing-best-practices","A/B Testing Best Practices",[12,26269,26270],{},[397,26271,26272],{},"Testing Framework:",[675,26274,26275,26281,26287,26293],{},[193,26276,26277,26280],{},[397,26278,26279],{},"Hypothesis:"," \"Adding a progress indicator will increase form completion by 15%\"",[193,26282,26283,26286],{},[397,26284,26285],{},"Sample Size:"," Calculate statistical significance (use tools like Optimizely)",[193,26288,26289,26292],{},[397,26290,26291],{},"Duration:"," 1-2 weeks minimum, account for weekly patterns",[193,26294,26295,26298],{},[397,26296,26297],{},"Success Criteria:"," Pre-defined metrics and confidence levels",[12,26300,26301],{},[397,26302,26303],{},"Common Pitfalls to Avoid:",[190,26305,26306,26309,26312,26315],{},[193,26307,26308],{},"Testing too many variables at once",[193,26310,26311],{},"Not reaching statistical significance",[193,26313,26314],{},"Ignoring external factors (holidays, news events)",[193,26316,26317],{},"Over-optimizing for short-term metrics",[16,26319,26321],{"id":26320},"_5-embrace-agility-and-be-prepared-to-adapt-quickly","5. Embrace Agility and Be Prepared to Adapt (Quickly!)",[12,26323,26324],{},"The startup landscape is defined by change. Market conditions, competitor moves, and user feedback can necessitate rapid shifts in strategy or product direction.",[116,26326,26328],{"id":26327},"modern-agile-practices","Modern Agile Practices",[12,26330,26331],{},[397,26332,26333],{},"Shape Up Methodology:",[190,26335,26336,26339,26342,26345],{},[193,26337,26338],{},"6-week cycles instead of 2-week sprints",[193,26340,26341],{},"Fixed time, variable scope",[193,26343,26344],{},"Betting on the most important work",[193,26346,26347],{},"Reduces context switching and improves focus",[12,26349,26350],{},[397,26351,26000],{},[190,26353,26354,26357,26360],{},[193,26355,26356],{},"User research integrated into every sprint",[193,26358,26359],{},"Opportunity solution trees for problem exploration",[193,26361,26362],{},"Dual-track development (discovery + delivery)",[12,26364,26365],{},[397,26366,26367],{},"Rapid Experimentation:",[190,26369,26370,26373,26376],{},[193,26371,26372],{},"\"Fake it till you make it\" prototyping",[193,26374,26375],{},"Wizard of Oz testing for expensive features",[193,26377,26378],{},"Concierge testing for personalized user experiences",[16,26380,26382],{"id":26381},"_6-build-and-maintain-product-vision","6. Build and Maintain Product Vision",[12,26384,26385],{},"In the chaos of startup life, maintaining a clear product vision is crucial for making consistent decisions.",[116,26387,26389],{"id":26388},"vision-vs-roadmap","Vision vs. Roadmap",[12,26391,26392,26394,26395,26398,26399,26402],{},[397,26393,25237],{}," The ultimate destination (e.g., \"Democratize AI for small businesses\")\n",[397,26396,26397],{},"Product Strategy:"," How you'll get there (e.g., \"Build no-code AI tools\")\n",[397,26400,26401],{},"Product Roadmap:"," The path with milestones and timelines",[116,26404,26406],{"id":26405},"vision-communication","Vision Communication",[12,26408,26409],{},[397,26410,26411],{},"Vision Documents:",[190,26413,26414,26417,26420,26423],{},[193,26415,26416],{},"One-page vision summary",[193,26418,26419],{},"Target user profiles",[193,26421,26422],{},"Key success metrics",[193,26424,26425],{},"Competitive landscape",[12,26427,26428],{},[397,26429,26430],{},"Regular Vision Check-ins:",[190,26432,26433,26436,26439],{},[193,26434,26435],{},"Monthly vision reviews with the team",[193,26437,26438],{},"Quarterly vision updates based on learnings",[193,26440,26441],{},"Annual vision refresh based on market changes",[16,26443,26445],{"id":26444},"_7-master-stakeholder-management","7. Master Stakeholder Management",[12,26447,26448],{},"Startups have many stakeholders with competing priorities. Effective management is key to success.",[116,26450,26452],{"id":26451},"stakeholder-mapping","Stakeholder Mapping",[12,26454,26455],{},[397,26456,26457],{},"Identify Key Stakeholders:",[190,26459,26460,26466,26472,26478,26484,26490],{},[193,26461,26462,26465],{},[397,26463,26464],{},"Executive Team:"," Strategic alignment, resource allocation",[193,26467,26468,26471],{},[397,26469,26470],{},"Engineering:"," Technical feasibility, development velocity",[193,26473,26474,26477],{},[397,26475,26476],{},"Design:"," User experience, brand consistency",[193,26479,26480,26483],{},[397,26481,26482],{},"Marketing:"," Go-to-market strategy, user acquisition",[193,26485,26486,26489],{},[397,26487,26488],{},"Sales/Customer Success:"," Customer needs, competitive intelligence",[193,26491,26492,26495],{},[397,26493,26494],{},"Users:"," Product validation, feature requests",[12,26497,26498],{},[397,26499,26500],{},"Communication Cadence:",[190,26502,26503,26509,26515,26521],{},[193,26504,26505,26508],{},[397,26506,26507],{},"Daily:"," Engineering stand-ups (if needed)",[193,26510,26511,26514],{},[397,26512,26513],{},"Weekly:"," Product team sync, stakeholder updates",[193,26516,26517,26520],{},[397,26518,26519],{},"Monthly:"," Executive reviews, roadmap planning",[193,26522,26523,26526],{},[397,26524,26525],{},"Quarterly:"," Strategy sessions, vision refresh",[116,26528,26530],{"id":26529},"managing-up-and-across","Managing Up and Across",[12,26532,26533],{},[397,26534,26535],{},"Executive Management:",[190,26537,26538,26541,26544],{},[193,26539,26540],{},"Focus on business impact and strategic alignment",[193,26542,26543],{},"Prepare executive summaries with key metrics",[193,26545,26546],{},"Anticipate questions and prepare data-driven answers",[12,26548,26549],{},[397,26550,26551],{},"Cross-Functional Collaboration:",[190,26553,26554,26557,26560],{},[193,26555,26556],{},"Build trust through transparency and reliability",[193,26558,26559],{},"Understand other teams' constraints and priorities",[193,26561,26562],{},"Find win-win solutions that benefit all parties",[16,26564,26566],{"id":26565},"_8-invest-in-team-development-and-culture","8. Invest in Team Development and Culture",[12,26568,26569],{},"Your team's capabilities and culture directly impact product success.",[116,26571,26573],{"id":26572},"building-product-minded-teams","Building Product-Minded Teams",[12,26575,26576],{},[397,26577,26578],{},"Hiring for Product Sense:",[190,26580,26581,26584,26587],{},[193,26582,26583],{},"Look for curiosity about user problems",[193,26585,26586],{},"Assess ability to make trade-off decisions",[193,26588,26589],{},"Test communication and collaboration skills",[12,26591,26592],{},[397,26593,26594],{},"Team Development:",[190,26596,26597,26600,26603],{},[193,26598,26599],{},"Regular product training and workshops",[193,26601,26602],{},"Cross-functional project rotations",[193,26604,26605],{},"Mentorship programs for junior team members",[12,26607,26608],{},[397,26609,26610],{},"Product Culture:",[190,26612,26613,26616,26619,26622],{},[193,26614,26615],{},"Encourage user empathy and customer obsession",[193,26617,26618],{},"Celebrate learning from failures",[193,26620,26621],{},"Reward data-driven decision making",[193,26623,26624],{},"Foster psychological safety for honest feedback",[16,26626,26628],{"id":26627},"_9-leverage-ai-tools-for-productivity","9. Leverage AI Tools for Productivity",[12,26630,26631],{},"AI is transforming product management in 2025, but it's a tool, not a replacement.",[116,26633,26635],{"id":26634},"ai-for-product-managers","AI for Product Managers",[12,26637,26638],{},[397,26639,26640],{},"Research and Analysis:",[190,26642,26643,26648,26652],{},[193,26644,26645,26647],{},[397,26646,25705],{}," User interview analysis, competitive research",[193,26649,26650,25712],{},[397,26651,25711],{},[193,26653,26654,26656],{},[397,26655,25717],{}," Automated A/B testing insights",[12,26658,26659],{},[397,26660,26661],{},"Roadmapping and Planning:",[190,26663,26664,26670,26676],{},[193,26665,26666,26669],{},[397,26667,26668],{},"Productboard AI:"," Automated prioritization suggestions",[193,26671,26672,26675],{},[397,26673,26674],{},"Aha! AI:"," Roadmap optimization and resource planning",[193,26677,26678,26681],{},[397,26679,26680],{},"Linear AI:"," Intelligent issue categorization",[12,26683,26684],{},[397,26685,26686],{},"User Experience:",[190,26688,26689,26695,26700],{},[193,26690,26691,26694],{},[397,26692,26693],{},"Maze AI:"," Automated usability testing analysis",[193,26696,26697,26699],{},[397,26698,25723],{}," AI-powered user feedback insights",[193,26701,26702,26705],{},[397,26703,26704],{},"Hotjar AI:"," Automated heat map analysis",[116,26707,26709],{"id":26708},"ai-best-practices","AI Best Practices",[12,26711,26712],{},[397,26713,26714],{},"Use AI For:",[190,26716,26717,26720,26723,26726],{},[193,26718,26719],{},"Repetitive tasks (data analysis, report generation)",[193,26721,26722],{},"Pattern recognition in user data",[193,26724,26725],{},"Initial drafts of documentation",[193,26727,26728],{},"Research and information gathering",[12,26730,26731],{},[397,26732,26733],{},"Don't Use AI For:",[190,26735,26736,26739,26742,26745],{},[193,26737,26738],{},"Strategic decision making",[193,26740,26741],{},"User empathy and understanding",[193,26743,26744],{},"Creative vision and product direction",[193,26746,26747],{},"Final validation of important decisions",[16,26749,26751],{"id":26750},"_10-focus-on-sustainable-growth","10. Focus on Sustainable Growth",[12,26753,26754],{},"Startup success isn't just about rapid growth—it's about sustainable, profitable growth.",[116,26756,26758],{"id":26757},"growth-models-for-2025","Growth Models for 2025",[12,26760,26761],{},[397,26762,26763],{},"Product-Led Growth (PLG):",[190,26765,26766,26769,26772],{},[193,26767,26768],{},"Users discover and adopt your product organically",[193,26770,26771],{},"Freemium models with clear upgrade paths",[193,26773,26774],{},"Self-serve onboarding and expansion",[12,26776,26777],{},[397,26778,26779],{},"Sales-Led Growth (SLG):",[190,26781,26782,26785,26788],{},[193,26783,26784],{},"Direct sales for complex, high-value solutions",[193,26786,26787],{},"Account-based marketing strategies",[193,26789,26790],{},"Long sales cycles with high touch",[12,26792,26793],{},[397,26794,26795],{},"Hybrid Approaches:",[190,26797,26798,26801,26804],{},[193,26799,26800],{},"Product-qualified leads (PQLs) for sales targeting",[193,26802,26803],{},"Account expansion through product usage analytics",[193,26805,26806],{},"Community-driven growth strategies",[116,26808,26810],{"id":26809},"sustainable-metrics","Sustainable Metrics",[12,26812,26813],{},[397,26814,26815],{},"Beyond Vanity Metrics:",[190,26817,26818,26824,26830,26836],{},[193,26819,26820,26823],{},[397,26821,26822],{},"Cohort Analysis:"," Track user behavior over time",[193,26825,26826,26829],{},[397,26827,26828],{},"Unit Economics:"," Customer acquisition cost vs. lifetime value",[193,26831,26832,26835],{},[397,26833,26834],{},"Product-Market Fit:"," Measure using the Sean Ellis test",[193,26837,26838,26841],{},[397,26839,26840],{},"Churn Analysis:"," Understand why users leave and how to prevent it",[12,26843,26844],{},[397,26845,26846],{},"Long-term Health Indicators:",[190,26848,26849,26852,26855,26858],{},[193,26850,26851],{},"Development velocity and code quality",[193,26853,26854],{},"Team satisfaction and retention",[193,26856,26857],{},"Customer satisfaction and NPS scores",[193,26859,26860],{},"Financial sustainability and runway",[16,26862,26864],{"id":26863},"conclusion-the-startup-pm-mindset","Conclusion: The Startup PM Mindset",[12,26866,26867],{},"Product management in a startup is a thrilling, high-impact role that combines strategy, execution, and leadership. In 2025, with AI tools enhancing productivity and data driving decisions, successful PMs are those who:",[190,26869,26870,26876,26882,26888,26894],{},[193,26871,26872,26875],{},[397,26873,26874],{},"Stay user-obsessed"," while maintaining business acumen",[193,26877,26878,26881],{},[397,26879,26880],{},"Communicate clearly"," across all levels of the organization",[193,26883,26884,26887],{},[397,26885,26886],{},"Make tough decisions"," with data and empathy",[193,26889,26890,26893],{},[397,26891,26892],{},"Adapt quickly"," to changing circumstances",[193,26895,26896,26899],{},[397,26897,26898],{},"Build great teams"," and foster productive cultures",[12,26901,26902],{},"Remember: In a startup, you're not just managing a product—you're building the future of the company. Every decision you make, every feature you prioritize, and every user problem you solve contributes to that mission.",[12,26904,26905],{},[397,26906,26907],{},"The best startup PMs are part strategist, part psychologist, part data scientist, and part entrepreneur. Master these skills, and you'll not only survive the startup chaos but thrive in it.",[12,26909,26910,26913],{},[397,26911,26912],{},"Your next product decision awaits. Make it count."," 🚀",{"title":24,"searchDepth":25,"depth":25,"links":26915},[26916,26919,26922,26925,26929,26932,26936,26940,26943,26947,26951],{"id":25971,"depth":28,"text":25972,"children":26917},[26918],{"id":25978,"depth":25,"text":25979},{"id":26035,"depth":28,"text":26036,"children":26920},[26921],{"id":26042,"depth":25,"text":26043},{"id":26089,"depth":28,"text":26090,"children":26923},[26924],{"id":26096,"depth":25,"text":26097},{"id":26173,"depth":28,"text":26174,"children":26926},[26927,26928],{"id":26180,"depth":25,"text":26181},{"id":26266,"depth":25,"text":26267},{"id":26320,"depth":28,"text":26321,"children":26930},[26931],{"id":26327,"depth":25,"text":26328},{"id":26381,"depth":28,"text":26382,"children":26933},[26934,26935],{"id":26388,"depth":25,"text":26389},{"id":26405,"depth":25,"text":26406},{"id":26444,"depth":28,"text":26445,"children":26937},[26938,26939],{"id":26451,"depth":25,"text":26452},{"id":26529,"depth":25,"text":26530},{"id":26565,"depth":28,"text":26566,"children":26941},[26942],{"id":26572,"depth":25,"text":26573},{"id":26627,"depth":28,"text":26628,"children":26944},[26945,26946],{"id":26634,"depth":25,"text":26635},{"id":26708,"depth":25,"text":26709},{"id":26750,"depth":28,"text":26751,"children":26948},[26949,26950],{"id":26757,"depth":25,"text":26758},{"id":26809,"depth":25,"text":26810},{"id":26863,"depth":28,"text":26864},"Navigate the unique challenges of product management in startups with these key strategies for user understanding, ruthless prioritization, effective communication, data-driven decisions, and agility in the AI era.",{"excerpt":26954},{"type":9,"value":26955},[26956,26958],[12,26957,25965],{},[12,26959,25968],{},"/product-management-tips",{"title":25960,"description":26952},"product-management-tips",[2127,29,26964,26965,26966,10337,25956],"agile","lean-startup","product-strategy","FDlWDsV4M_HxsTk7KnNFj_SpJXqeHNYlvJWevx3vEAk",{"id":26969,"title":26970,"author":7,"body":26971,"category":1829,"description":26998,"extension":31,"image":26999,"isDraft":33,"isFeatured":34,"locale":35,"meta":27000,"navigation":33,"path":27005,"publishedAt":1838,"readingTime":1839,"seo":27006,"stem":27007,"tags":27008,"updatedAt":1838,"__hash__":27009},"articles_en/reever-ai-customer-support-case-study.md","Reever: AI-Powered Customer Support Automation",{"type":9,"value":26972,"toc":26992},[26973,26976,26978,26980,26982,26984,26986,26988,26990],[12,26974,26975],{},"Exploring the development of Reever, an intelligent platform that revolutionizes customer support through AI-powered automation.",[16,26977,1801],{"id":1800},[12,26979,1804],{},[16,26981,1808],{"id":1807},[12,26983,1804],{},[16,26985,1814],{"id":1813},[12,26987,1804],{},[16,26989,1820],{"id":1819},[12,26991,1804],{},{"title":24,"searchDepth":25,"depth":25,"links":26993},[26994,26995,26996,26997],{"id":1800,"depth":28,"text":1801},{"id":1807,"depth":28,"text":1808},{"id":1813,"depth":28,"text":1814},{"id":1819,"depth":28,"text":1820},"Case study of Reever, a platform automating customer support with AI across multiple channels including email, WhatsApp, Slack, and Discord.","https://images.unsplash.com/photo-1531746790731-6c087fecd65a?q=80&w=1200&auto=format&fit=crop",{"excerpt":27001},{"type":9,"value":27002},[27003],[12,27004,26975],{},"/reever-ai-customer-support-case-study",{"title":26970,"description":26998},"reever-ai-customer-support-case-study",[1829,73,342,24092,1756],"dw1E9K2VlkWASLE8QI1fUkKr1A-CW1w5SvGHuWW_Jr4",{"id":27011,"title":27012,"author":7,"body":27013,"category":29,"description":30,"extension":31,"image":23470,"isDraft":33,"isFeatured":34,"locale":35,"meta":27025,"navigation":33,"path":27030,"publishedAt":23643,"readingTime":2105,"seo":27031,"stem":27032,"tags":27033,"updatedAt":23643,"__hash__":27035},"articles_en/risk-management-in-entrepreneurship.md","Risk Management in Entrepreneurship",{"type":9,"value":27014,"toc":27022},[27015,27018,27020],[12,27016,27017],{},"Effective risk management protects your startup from unpleasant surprises.",[16,27019,19],{"id":18},[12,27021,22],{},{"title":24,"searchDepth":25,"depth":25,"links":27023},[27024],{"id":18,"depth":28,"text":19},{"excerpt":27026},{"type":9,"value":27027},[27028],[12,27029,27017],{},"/risk-management-in-entrepreneurship",{"title":27012,"description":30},"risk-management-in-entrepreneurship",[29,47,27034,2110],"risk-management","RKDbcZHYPLfu7fm0ULeIPHxoTVeLisymVN_tpG9mLi0",{"id":27037,"title":27038,"author":7,"body":27039,"category":1829,"description":27066,"extension":31,"image":27067,"isDraft":33,"isFeatured":34,"locale":35,"meta":27068,"navigation":33,"path":27073,"publishedAt":1838,"readingTime":1839,"seo":27074,"stem":27075,"tags":27076,"updatedAt":1838,"__hash__":27080},"articles_en/rize-gg-gaming-platform-case-study.md","Rize.gg: All-in-One Platform for Gamers",{"type":9,"value":27040,"toc":27060},[27041,27044,27046,27048,27050,27052,27054,27056,27058],[12,27042,27043],{},"Exploring the development journey of Rize.gg, an all-in-one social and competitive platform for the gaming community.",[16,27045,1801],{"id":1800},[12,27047,1804],{},[16,27049,1808],{"id":1807},[12,27051,1804],{},[16,27053,1814],{"id":1813},[12,27055,1804],{},[16,27057,1820],{"id":1819},[12,27059,1804],{},{"title":24,"searchDepth":25,"depth":25,"links":27061},[27062,27063,27064,27065],{"id":1800,"depth":28,"text":1801},{"id":1807,"depth":28,"text":1808},{"id":1813,"depth":28,"text":1814},{"id":1819,"depth":28,"text":1820},"Case study of Rize.gg, a comprehensive platform for gamers to connect, socialize, have scrims, create teams and clubs, and join tournaments.","https://images.unsplash.com/photo-1542751371-adc38448a05e?q=80&w=1200&auto=format&fit=crop",{"excerpt":27069},{"type":9,"value":27070},[27071],[12,27072,27043],{},"/rize-gg-gaming-platform-case-study",{"title":27038,"description":27066},"rize-gg-gaming-platform-case-study",[1829,73,27077,27078,27079],"gaming","social-platform","esports","lliAibieRspC_OmBSpdKVC0qpawsz-umNWqPbn0mzzk",{"id":27082,"title":27083,"author":7,"body":27084,"category":1829,"description":27111,"extension":31,"image":27112,"isDraft":33,"isFeatured":34,"locale":35,"meta":27113,"navigation":33,"path":27118,"publishedAt":1838,"readingTime":1839,"seo":27119,"stem":27120,"tags":27121,"updatedAt":1838,"__hash__":27125},"articles_en/route-genius-delivery-optimization-case-study.md","Route Genius: Real-Time Delivery Optimization Platform",{"type":9,"value":27085,"toc":27105},[27086,27089,27091,27093,27095,27097,27099,27101,27103],[12,27087,27088],{},"Exploring the development of Route Genius, a sophisticated platform for optimizing delivery routes using real-time traffic data.",[16,27090,1801],{"id":1800},[12,27092,1804],{},[16,27094,1808],{"id":1807},[12,27096,1804],{},[16,27098,1814],{"id":1813},[12,27100,1804],{},[16,27102,1820],{"id":1819},[12,27104,1804],{},{"title":24,"searchDepth":25,"depth":25,"links":27106},[27107,27108,27109,27110],{"id":1800,"depth":28,"text":1801},{"id":1807,"depth":28,"text":1808},{"id":1813,"depth":28,"text":1814},{"id":1819,"depth":28,"text":1820},"Case study of Route Genius, a platform that orchestrates trucks, cars, and deliveries with optimization based on real-time Google traffic data.","https://images.unsplash.com/photo-1586528116311-ad8dd3c8310d?q=80&w=1200&auto=format&fit=crop",{"excerpt":27114},{"type":9,"value":27115},[27116],[12,27117,27088],{},"/route-genius-delivery-optimization-case-study",{"title":27083,"description":27111},"route-genius-delivery-optimization-case-study",[1829,73,27122,27123,27124],"logistics","optimization","real-time-data","WsQwb4NjNJCODVFi19vJyqnIfNTBhidwGYQF8Bt_toI",{"id":27127,"title":27128,"author":7,"body":27129,"category":1829,"description":27156,"extension":31,"image":22965,"isDraft":33,"isFeatured":34,"locale":35,"meta":27157,"navigation":33,"path":27162,"publishedAt":1838,"readingTime":1839,"seo":27163,"stem":27164,"tags":27165,"updatedAt":1838,"__hash__":27166},"articles_en/sapious-elearning-platform-case-study.md","Sapious: E-Learning Platform for Developers",{"type":9,"value":27130,"toc":27150},[27131,27134,27136,27138,27140,27142,27144,27146,27148],[12,27132,27133],{},"Deep dive into Sapious, a comprehensive e-learning platform combining self-paced courses with personalized mentorship for aspiring developers.",[16,27135,1801],{"id":1800},[12,27137,1804],{},[16,27139,1808],{"id":1807},[12,27141,1804],{},[16,27143,1814],{"id":1813},[12,27145,1804],{},[16,27147,1820],{"id":1819},[12,27149,1804],{},{"title":24,"searchDepth":25,"depth":25,"links":27151},[27152,27153,27154,27155],{"id":1800,"depth":28,"text":1801},{"id":1807,"depth":28,"text":1808},{"id":1813,"depth":28,"text":1814},{"id":1819,"depth":28,"text":1820},"Case study of Sapious, an e-learning platform offering self-paced courses and mentorship for learning to code and develop.",{"excerpt":27158},{"type":9,"value":27159},[27160],[12,27161,27133],{},"/sapious-elearning-platform-case-study",{"title":27128,"description":27156},"sapious-elearning-platform-case-study",[1829,73,1845,375,24235],"UIGVTqj7ENwEapo2tdTWcJm5RBiNODqjVdfXdMtYo4I",{"id":27168,"title":27169,"author":7,"body":27170,"category":373,"description":27179,"extension":31,"image":27270,"isDraft":34,"isFeatured":34,"locale":35,"meta":27271,"navigation":33,"path":27281,"publishedAt":27282,"readingTime":336,"seo":27283,"stem":27272,"tags":27284,"updatedAt":2080,"__hash__":27285},"articles_en/self-taught-developers.md","Self-Taught Developers: Guide",{"type":9,"value":27171,"toc":27264},[27172,27177,27180,27183,27187,27190,27207,27211,27214,27225,27229,27232,27243,27247,27250,27261],[23807,27173,27174],{},[12,27175,27176],{},"No man is brave that has never walked a hundred miles. If you want to know the truth of who you are, walk until not a person knows your name. Travel is the great leveler, the great teacher, bitter as medicine, crueler than mirror-glass. A long stretch of road will teach you more about yourself than a hundred years of quiet. -Patrick Ruthfuss",[12,27178,27179],{},"It's no secret that the demand for skilled developers is on the rise, and more and more people are turning to self-teaching as a way to enter the field. But the road to becoming a self-taught developer can be challenging, especially if you don't have a background in computer science.",[12,27181,27182],{},"Here are some tips and strategies to help you on your journey:",[16,27184,27186],{"id":27185},"find-the-right-resources","Find the right resources",[12,27188,27189],{},"There are a ton of online resources available for self-taught developers, ranging from free tutorials and video courses to paid online courses and certification programs. It's important to do your research and find resources that are tailored to your specific needs and goals. Here are a few things to consider when looking for resources:",[675,27191,27192,27195,27198,27201,27204],{},[193,27193,27194],{},"Your goals: What do you want to learn? Are you looking to learn a specific programming language or build a specific type of application? Make sure the resources you choose to align with your goals.",[193,27196,27197],{},"Your learning style: Everyone learns differently. Some people prefer video courses, while others prefer reading tutorials or working through exercises. Consider what learning style works best for you and choose resources that align with it.",[193,27199,27200],{},"Your budget: Some resources are free, while others come with a cost. Determine your budget and look for resources that fit within it.",[193,27202,27203],{},"The reputation of the resource: Check out reviews and ratings of the resource you're considering. Are other people finding it helpful and effective?",[193,27205,27206],{},"The format of the resource: Do you prefer interactive courses, or are you more comfortable with reading tutorials and documentation? Choose resources that align with your preferred format.",[16,27208,27210],{"id":27209},"practice-practice-practice","Practice, practice, practice",[12,27212,27213],{},"One of the best ways to learn programming is through hands-on practice. You can do this through online coding challenges and projects, or by building your own small applications or websites. The more you practice, the more you'll learn, and the more confident you'll become as a programmer. There are a few ways you can practice your programming skills:",[675,27215,27216,27219,27222],{},[193,27217,27218],{},"Online coding challenges and exercises: Many websites offer coding challenges and exercises that allow you to practice your skills in a variety of programming languages. Some popular options include HackerRank, CodeWars, and LeetCode.",[193,27220,27221],{},"Build your own projects: Consider building your own small applications or websites. This will give you the opportunity to apply what you've learned and create something that is uniquely your own.",[193,27223,27224],{},"Contribute to open source projects: Many open source projects welcome contributions from new developers. This is a great way to practice your skills and give back to the community at the same time.",[16,27226,27228],{"id":27227},"stay-up-to-date","Stay up to date",[12,27230,27231],{},"To be a successful self-taught developer, it's important to stay up to date with the latest trends and technologies. This can be done through reading industry blogs and publications, participating in online communities and forums, and attending tech meetups and conferences. Here are a few ways to do so:",[675,27233,27234,27237,27240],{},[193,27235,27236],{},"Read industry blogs and publications: Follow blogs and publications that cover the latest trends and technologies in the tech industry. This will help you stay informed about what's happening in the field and give you a sense of what's coming up next.",[193,27238,27239],{},"Participate in online communities and forums: Join online communities and forums related to programming and technology. This is a great way to connect with other developers and stay informed about what's happening in the industry.",[193,27241,27242],{},"Attend tech meetups and conferences: Consider attending tech meetups and conferences in your area. These events are a great way to meet other developers, learn about new technologies, and stay up to date on the latest trends.",[16,27244,27246],{"id":27245},"find-a-support-system","Find a support system",[12,27248,27249],{},"Finally, it's crucial to have a strong support system in place as you embark on your journey as a self-taught developer. This could include friends and family who are supportive of your goals, or a mentor who can offer guidance and advice. Here are a few ways to build a support system:",[675,27251,27252,27255,27258],{},[193,27253,27254],{},"Connect with friends and family: Surround yourself with people who are supportive of your goals and can offer encouragement and motivation.",[193,27256,27257],{},"Find a mentor: Consider reaching out to a more experienced developer who can offer guidance and advice. This could be someone you know personally or someone you find through online communities or tech meetups.",[193,27259,27260],{},"Join online communities and forums: Participating in online communities and forums is a great way to connect with other developers who are on a similar journey. You can ask questions, share your progress, and get feedback and support from others.",[12,27262,27263],{},"In summary, becoming a self-taught developer requires dedication, hard work, and a willingness to constantly learn and adapt. With the right resources, practice, and support system, it is possible to become a skilled and successful programmer.",{"title":24,"searchDepth":25,"depth":25,"links":27265},[27266,27267,27268,27269],{"id":27185,"depth":28,"text":27186},{"id":27209,"depth":28,"text":27210},{"id":27227,"depth":28,"text":27228},{"id":27245,"depth":28,"text":27246},"https://images.unsplash.com/photo-1581092580497-e0d23cbdf1dc?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDh8fHNvZnR3YXJlJTIwZW5nfGVufDB8fHx8MTY2MjU2MDg0Nw&ixlib=rb-1.2.1&q=80&w=2000",{"slug":27272,"excerpt":27273},"self-taught-developers",{"type":9,"value":27274},[27275,27279],[23807,27276,27277],{},[12,27278,27176],{},[12,27280,27179],{},"/self-taught-developers","2022-12-17T09:40:20.000Z",{"title":27169,"description":27179},[340,341,2078,342],"XSjnOocM89ogm4S1LIxL1i_unSfhshnPOwHRKwnxF18",{"id":27287,"title":27288,"author":7,"body":27289,"category":1829,"description":27316,"extension":31,"image":27317,"isDraft":33,"isFeatured":34,"locale":35,"meta":27318,"navigation":33,"path":27323,"publishedAt":1838,"readingTime":1839,"seo":27324,"stem":27325,"tags":27326,"updatedAt":1838,"__hash__":27328},"articles_en/seo-enhancer-automated-optimization-case-study.md","SEO Enhancer: Automated SEO Optimization Platform",{"type":9,"value":27290,"toc":27310},[27291,27294,27296,27298,27300,27302,27304,27306,27308],[12,27292,27293],{},"A comprehensive case study of SEO Enhancer, an intelligent platform automating SEO optimization for websites and blogs.",[16,27295,1801],{"id":1800},[12,27297,1804],{},[16,27299,1808],{"id":1807},[12,27301,1804],{},[16,27303,1814],{"id":1813},[12,27305,1804],{},[16,27307,1820],{"id":1819},[12,27309,1804],{},{"title":24,"searchDepth":25,"depth":25,"links":27311},[27312,27313,27314,27315],{"id":1800,"depth":28,"text":1801},{"id":1807,"depth":28,"text":1808},{"id":1813,"depth":28,"text":1814},{"id":1819,"depth":28,"text":1820},"Case study of SEO Enhancer, a platform that connects to websites and blogs to provide automated SEO enhancement tools on autopilot.","https://images.unsplash.com/photo-1432888622747-4eb9a8f2c293?q=80&w=1200&auto=format&fit=crop",{"excerpt":27319},{"type":9,"value":27320},[27321],[12,27322,27293],{},"/seo-enhancer-automated-optimization-case-study",{"title":27288,"description":27316},"seo-enhancer-automated-optimization-case-study",[1829,73,27327,1756,10383],"seo","ijdxjGGKqrJqAxmNZh_a1o0W5-bf1edpbdaE1UP2Tcs",{"id":27330,"title":27331,"author":7,"body":27332,"category":29,"description":28520,"extension":31,"image":32,"isDraft":34,"isFeatured":33,"locale":35,"meta":28521,"navigation":33,"path":28528,"publishedAt":10330,"readingTime":1839,"seo":28529,"stem":28530,"tags":28531,"updatedAt":10339,"__hash__":28536},"articles_en/startup-lessons.md","Critical Lessons Learned from My Rollercoaster Journey Building a Startup (2025 Edition)",{"type":9,"value":27333,"toc":28486},[27334,27337,27340,27344,27347,27351,27356,27367,27372,27392,27397,27417,27422,27441,27446,27450,27453,27457,27462,27482,27487,27507,27512,27532,27537,27563,27568,27594,27598,27601,27605,27610,27630,27635,27654,27659,27679,27683,27703,27708,27728,27732,27735,27739,27744,27764,27769,27789,27794,27814,27819,27839,27843,27846,27850,27855,27875,27880,27900,27905,27925,27929,27934,27954,27959,27979,27983,27986,27990,27995,28015,28020,28040,28045,28065,28070,28090,28094,28097,28101,28106,28126,28131,28150,28155,28175,28179,28182,28186,28191,28211,28216,28236,28241,28260,28264,28267,28271,28276,28296,28301,28321,28326,28346,28350,28353,28357,28362,28382,28387,28407,28412,28432,28436,28439,28442,28447,28478,28481],[12,27335,27336],{},"Building a startup in 2025 is an even more intense rollercoaster than it was a decade ago. The rapid evolution of AI, the shift to remote-first work cultures, the complexity of global markets, and the growing emphasis on sustainability have transformed the entrepreneurial landscape. My journey as a founder has been a masterclass in adaptation, resilience, and continuous learning.",[12,27338,27339],{},"Drawing from my experiences and observing thousands of startups, I've compiled these critical lessons that incorporate modern tools, methodologies, and the realities of building in 2025. These aren't theoretical concepts—they're battle-tested insights from the trenches.",[16,27341,27343],{"id":27342},"_1-validate-your-idea-relentlessly-now-with-ai-superpowers","1. Validate Your Idea Relentlessly (Now With AI Superpowers)",[12,27345,27346],{},"Passion for an idea remains essential, but in 2025, you have unprecedented tools to validate faster and more accurately than ever before. The cost of assumption has never been higher.",[116,27348,27350],{"id":27349},"ai-powered-validation-techniques","AI-Powered Validation Techniques",[12,27352,27353],{},[397,27354,27355],{},"Automated Market Research:",[190,27357,27358,27361,27364],{},[193,27359,27360],{},"Use tools like Crayon or Klue for competitive intelligence",[193,27362,27363],{},"Leverage ChatGPT and Claude for market analysis and trend identification",[193,27365,27366],{},"Implement AI-powered survey tools (Typeform AI, SurveyMonkey Genius) for rapid feedback collection",[12,27368,27369],{},[397,27370,27371],{},"Data-Driven Problem Validation:",[190,27373,27374,27380,27386],{},[193,27375,27376,27379],{},[397,27377,27378],{},"Landing Page Experiments:"," Create AI-generated landing pages (using tools like Durable or Copy.ai) and test conversion rates",[193,27381,27382,27385],{},[397,27383,27384],{},"Fake Door Testing:"," Use no-code tools like Bubble or Adalo to build clickable prototypes",[193,27387,27388,27391],{},[397,27389,27390],{},"Pre-Launch Waitlists:"," Tools like LaunchPass or Product Hunt for early interest validation",[12,27393,27394],{},[397,27395,27396],{},"Modern MVP Approaches:",[190,27398,27399,27405,27411],{},[193,27400,27401,27404],{},[397,27402,27403],{},"No-Code MVPs:"," Build functional prototypes with Bubble, Glide, or Softr in days, not months",[193,27406,27407,27410],{},[397,27408,27409],{},"AI-Assisted Development:"," Use GitHub Copilot or Replit for rapid prototyping",[193,27412,27413,27416],{},[397,27414,27415],{},"Concierge MVPs:"," Manually deliver the service to initial customers while building automation",[12,27418,27419],{},[397,27420,27421],{},"Quantitative Validation Metrics:",[190,27423,27424,27430,27436],{},[193,27425,27426,27429],{},[397,27427,27428],{},"Problem-Solution Fit:"," Aim for 40%+ of surveyed users saying they'd \"definitely\" use your solution",[193,27431,27432,27435],{},[397,27433,27434],{},"Market Size Validation:"," Use tools like SimilarWeb or BuiltWith for realistic market sizing",[193,27437,27438,27440],{},[397,27439,25370],{}," AI tools can analyze thousands of competitors in minutes",[12,27442,27443,27445],{},[397,27444,482],{}," Create a \"Validation Scorecard\" with weighted metrics for go/no-go decisions.",[16,27447,27449],{"id":27448},"_2-build-complementary-teams-in-a-remote-first-world","2. Build Complementary Teams in a Remote-First World",[12,27451,27452],{},"The pandemic accelerated remote work, and in 2025, distributed teams are the norm. Building cohesive, high-performing teams across time zones requires new strategies.",[116,27454,27456],{"id":27455},"remote-first-team-building","Remote-First Team Building",[12,27458,27459],{},[397,27460,27461],{},"Hiring in the Distributed Age:",[190,27463,27464,27470,27476],{},[193,27465,27466,27469],{},[397,27467,27468],{},"Async-First Communication:"," Default to written communication (Notion, Slack, Linear)",[193,27471,27472,27475],{},[397,27473,27474],{},"Video as Enhancement:"," Use Loom for complex explanations, not daily stand-ups",[193,27477,27478,27481],{},[397,27479,27480],{},"Global Talent Pool:"," Hire for timezone overlap, not physical proximity",[12,27483,27484],{},[397,27485,27486],{},"Cultural Foundation:",[190,27488,27489,27495,27501],{},[193,27490,27491,27494],{},[397,27492,27493],{},"Values-Driven Hiring:"," Use tools like Culture Amp for cultural fit assessment",[193,27496,27497,27500],{},[397,27498,27499],{},"Psychological Safety:"," Implement anonymous feedback systems from day one",[193,27502,27503,27506],{},[397,27504,27505],{},"Inclusive Practices:"," Design for neurodiversity and different working styles",[12,27508,27509],{},[397,27510,27511],{},"Modern Team Structures:",[190,27513,27514,27520,27526],{},[193,27515,27516,27519],{},[397,27517,27518],{},"T-Shaped Skills:"," Hire specialists who are generalists in related areas",[193,27521,27522,27525],{},[397,27523,27524],{},"Fluid Roles:"," Design roles that can evolve as the company grows",[193,27527,27528,27531],{},[397,27529,27530],{},"Cross-Functional Pods:"," Small, autonomous teams that own entire features",[12,27533,27534],{},[397,27535,27536],{},"Tools for Distributed Success:",[190,27538,27539,27545,27551,27557],{},[193,27540,27541,27544],{},[397,27542,27543],{},"Collaboration:"," Notion, Figma, Miro for async collaboration",[193,27546,27547,27550],{},[397,27548,27549],{},"Communication:"," Slack, Discord, or Microsoft Teams with clear norms",[193,27552,27553,27556],{},[397,27554,27555],{},"Project Management:"," Linear, Jira, or Asana with automation",[193,27558,27559,27562],{},[397,27560,27561],{},"Team Health:"," Officevibe or Culture Amp for regular pulse checks",[12,27564,27565],{},[397,27566,27567],{},"Building Trust Remotely:",[190,27569,27570,27576,27582,27588],{},[193,27571,27572,27575],{},[397,27573,27574],{},"Over-Communication:"," Share context abundantly",[193,27577,27578,27581],{},[397,27579,27580],{},"Regular 1:1s:"," Weekly video calls for relationship building",[193,27583,27584,27587],{},[397,27585,27586],{},"Virtual Team Building:"," Use tools like Donut for random connections",[193,27589,27590,27593],{},[397,27591,27592],{},"In-Person When Possible:"," Budget for quarterly company retreats",[16,27595,27597],{"id":27596},"_3-obsess-over-customers-now-with-ai-insights","3. Obsess Over Customers (Now With AI Insights)",[12,27599,27600],{},"Your customers are your most valuable asset, and in 2025, you have AI tools to understand them better than ever before.",[116,27602,27604],{"id":27603},"ai-enhanced-customer-understanding","AI-Enhanced Customer Understanding",[12,27606,27607],{},[397,27608,27609],{},"Advanced Analytics:",[190,27611,27612,27618,27624],{},[193,27613,27614,27617],{},[397,27615,27616],{},"Product Analytics:"," Mixpanel, Amplitude, or PostHog for user behavior insights",[193,27619,27620,27623],{},[397,27621,27622],{},"Customer Success Platforms:"," ChurnZero or Gainsight for proactive engagement",[193,27625,27626,27629],{},[397,27627,27628],{},"AI-Powered Support:"," Intercom, Zendesk with AI chatbots for initial triage",[12,27631,27632],{},[397,27633,27634],{},"Continuous Feedback Loops:",[190,27636,27637,27643,27648],{},[193,27638,27639,27642],{},[397,27640,27641],{},"In-App Surveys:"," Tools like Delighted or Hotjar for contextual feedback",[193,27644,27645,27647],{},[397,27646,25352],{}," Calendly for scheduling, Otter.ai for transcription and analysis",[193,27649,27650,27653],{},[397,27651,27652],{},"Social Listening:"," Brandwatch or Hootsuite for brand sentiment monitoring",[12,27655,27656],{},[397,27657,27658],{},"Customer Success Metrics:",[190,27660,27661,27667,27673],{},[193,27662,27663,27666],{},[397,27664,27665],{},"Health Scores:"," Predictive analytics to identify at-risk customers",[193,27668,27669,27672],{},[397,27670,27671],{},"Expansion Revenue:"," Track upgrade and cross-sell opportunities",[193,27674,27675,27678],{},[397,27676,27677],{},"Net Promoter Score (NPS):"," Regular pulse surveys with AI-driven follow-ups",[12,27680,27681],{},[397,27682,1666],{},[190,27684,27685,27691,27697],{},[193,27686,27687,27690],{},[397,27688,27689],{},"Behavioral Email:"," Klaviyo or Mailchimp with AI segmentation",[193,27692,27693,27696],{},[397,27694,27695],{},"Dynamic Pricing:"," AI-driven pricing optimization",[193,27698,27699,27702],{},[397,27700,27701],{},"Product Recommendations:"," Machine learning for feature suggestions",[12,27704,27705],{},[397,27706,27707],{},"Customer-Centric Culture:",[190,27709,27710,27716,27722],{},[193,27711,27712,27715],{},[397,27713,27714],{},"Voice of Customer Programs:"," Dedicated roles for customer insights",[193,27717,27718,27721],{},[397,27719,27720],{},"Customer Advisory Boards:"," Early access programs for key users",[193,27723,27724,27727],{},[397,27725,27726],{},"Transparency:"," Share product roadmaps and decision-making processes",[16,27729,27731],{"id":27730},"_4-embrace-failure-as-fuel-with-modern-learning-frameworks","4. Embrace Failure as Fuel (With Modern Learning Frameworks)",[12,27733,27734],{},"Failure is inevitable, but in 2025, you can learn from it faster and more systematically than ever before.",[116,27736,27738],{"id":27737},"structured-learning-from-failure","Structured Learning from Failure",[12,27740,27741],{},[397,27742,27743],{},"Fail Fast Frameworks:",[190,27745,27746,27752,27758],{},[193,27747,27748,27751],{},[397,27749,27750],{},"Build-Measure-Learn Loops:"," Weekly experiments instead of quarterly releases",[193,27753,27754,27757],{},[397,27755,27756],{},"Hypothesis-Driven Development:"," Clear, testable assumptions for every feature",[193,27759,27760,27763],{},[397,27761,27762],{},"Kill Criteria:"," Pre-defined conditions for stopping poorly performing initiatives",[12,27765,27766],{},[397,27767,27768],{},"Post-Mortem 2.0:",[190,27770,27771,27777,27783],{},[193,27772,27773,27776],{},[397,27774,27775],{},"Blame-Free Analysis:"," Focus on systems, not individuals",[193,27778,27779,27782],{},[397,27780,27781],{},"Five Whys Technique:"," Root cause analysis for complex failures",[193,27784,27785,27788],{},[397,27786,27787],{},"Quantitative Assessment:"," Measure the cost and impact of each failure",[12,27790,27791],{},[397,27792,27793],{},"Psychological Resilience:",[190,27795,27796,27802,27808],{},[193,27797,27798,27801],{},[397,27799,27800],{},"Growth Mindset Training:"," Regular workshops on embracing challenges",[193,27803,27804,27807],{},[397,27805,27806],{},"Failure Resume:"," Document and celebrate lessons learned",[193,27809,27810,27813],{},[397,27811,27812],{},"Mental Health Support:"," Access to counseling and wellness programs",[12,27815,27816],{},[397,27817,27818],{},"Innovation Through Experimentation:",[190,27820,27821,27827,27833],{},[193,27822,27823,27826],{},[397,27824,27825],{},"20% Time:"," Dedicated time for exploring new ideas",[193,27828,27829,27832],{},[397,27830,27831],{},"Innovation Labs:"," Separate teams for high-risk, high-reward projects",[193,27834,27835,27838],{},[397,27836,27837],{},"Partner Ecosystems:"," Collaborate with other startups for shared learning",[16,27840,27842],{"id":27841},"_5-prioritize-founder-wellness-and-sustainability","5. Prioritize Founder Wellness and Sustainability",[12,27844,27845],{},"Burnout is the silent killer of startups. In 2025, successful founders treat their health as seriously as their business metrics.",[116,27847,27849],{"id":27848},"mental-health-first","Mental Health First",[12,27851,27852],{},[397,27853,27854],{},"Work-Life Integration:",[190,27856,27857,27863,27869],{},[193,27858,27859,27862],{},[397,27860,27861],{},"Boundaries:"," Designated \"focus hours\" and \"family time\"",[193,27864,27865,27868],{},[397,27866,27867],{},"Energy Management:"," Track and optimize energy levels, not just time",[193,27870,27871,27874],{},[397,27872,27873],{},"Delegating Early:"," Hire for your weaknesses, not just your strengths",[12,27876,27877],{},[397,27878,27879],{},"Wellness Practices:",[190,27881,27882,27888,27894],{},[193,27883,27884,27887],{},[397,27885,27886],{},"Regular Exercise:"," Company-subsidized gym memberships or virtual fitness",[193,27889,27890,27893],{},[397,27891,27892],{},"Sleep Optimization:"," Tools like Whoop or Oura Ring for sleep tracking",[193,27895,27896,27899],{},[397,27897,27898],{},"Meditation/Mindfulness:"," Apps like Headspace with team meditation sessions",[12,27901,27902],{},[397,27903,27904],{},"Support Systems:",[190,27906,27907,27913,27919],{},[193,27908,27909,27912],{},[397,27910,27911],{},"Founder Therapists:"," Specialized coaching for entrepreneurial challenges",[193,27914,27915,27918],{},[397,27916,27917],{},"Peer Networks:"," Mastermind groups and founder communities",[193,27920,27921,27924],{},[397,27922,27923],{},"Executive Coaching:"," Regular sessions with experienced mentors",[116,27926,27928],{"id":27927},"sustainable-business-practices","Sustainable Business Practices",[12,27930,27931],{},[397,27932,27933],{},"ESG Integration:",[190,27935,27936,27942,27948],{},[193,27937,27938,27941],{},[397,27939,27940],{},"Environmental Impact:"," Carbon footprint tracking and reduction goals",[193,27943,27944,27947],{},[397,27945,27946],{},"Social Responsibility:"," Diversity hiring goals and community involvement",[193,27949,27950,27953],{},[397,27951,27952],{},"Governance:"," Transparent decision-making and ethical AI usage",[12,27955,27956],{},[397,27957,27958],{},"Long-term Thinking:",[190,27960,27961,27967,27973],{},[193,27962,27963,27966],{},[397,27964,27965],{},"Sustainable Growth:"," Focus on profitable unit economics over vanity metrics",[193,27968,27969,27972],{},[397,27970,27971],{},"Stakeholder Capitalism:"," Balance interests of customers, employees, and investors",[193,27974,27975,27978],{},[397,27976,27977],{},"Regenerative Business:"," Create positive impact beyond profit generation",[16,27980,27982],{"id":27981},"_6-master-modern-funding-and-resource-management","6. Master Modern Funding and Resource Management",[12,27984,27985],{},"The funding landscape has evolved dramatically, with new sources and strategies available.",[116,27987,27989],{"id":27988},"funding-strategies-for-2025","Funding Strategies for 2025",[12,27991,27992],{},[397,27993,27994],{},"Bootstrapping 2.0:",[190,27996,27997,28003,28009],{},[193,27998,27999,28002],{},[397,28000,28001],{},"Revenue First:"," Achieve product-market fit before seeking external funding",[193,28004,28005,28008],{},[397,28006,28007],{},"Lean Operations:"," Use no-code tools and automation to minimize overhead",[193,28010,28011,28014],{},[397,28012,28013],{},"Customer-Funded Growth:"," Pre-sales and subscriptions to fund development",[12,28016,28017],{},[397,28018,28019],{},"Venture Capital Evolution:",[190,28021,28022,28028,28034],{},[193,28023,28024,28027],{},[397,28025,28026],{},"Mission-Aligned Investors:"," Seek investors who share your values and vision",[193,28029,28030,28033],{},[397,28031,28032],{},"Diverse Funding Sources:"," Consider crowdfunding, grants, and strategic partnerships",[193,28035,28036,28039],{},[397,28037,28038],{},"Down Rounds Awareness:"," Plan for economic cycles and fundraising challenges",[12,28041,28042],{},[397,28043,28044],{},"Alternative Funding:",[190,28046,28047,28053,28059],{},[193,28048,28049,28052],{},[397,28050,28051],{},"Revenue-Based Financing:"," Tools like Lighter Capital for non-dilutive funding",[193,28054,28055,28058],{},[397,28056,28057],{},"Strategic Partnerships:"," Joint ventures and co-development agreements",[193,28060,28061,28064],{},[397,28062,28063],{},"Government Grants:"," Programs for innovation, diversity, and sustainability",[12,28066,28067],{},[397,28068,28069],{},"Resource Optimization:",[190,28071,28072,28078,28084],{},[193,28073,28074,28077],{},[397,28075,28076],{},"Outsourcing:"," Use platforms like Upwork or Toptal for specialized skills",[193,28079,28080,28083],{},[397,28081,28082],{},"Automation First:"," Implement AI tools before hiring for repetitive tasks",[193,28085,28086,28089],{},[397,28087,28088],{},"Flexible Hiring:"," Contractors and part-time experts for variable needs",[16,28091,28093],{"id":28092},"_7-embrace-diversity-equity-and-inclusion-dei-as-competitive-advantage","7. Embrace Diversity, Equity, and Inclusion (DEI) as Competitive Advantage",[12,28095,28096],{},"Diverse teams outperform homogeneous ones, and in 2025, DEI is both ethically right and commercially smart.",[116,28098,28100],{"id":28099},"building-inclusive-cultures","Building Inclusive Cultures",[12,28102,28103],{},[397,28104,28105],{},"Diverse Hiring Practices:",[190,28107,28108,28114,28120],{},[193,28109,28110,28113],{},[397,28111,28112],{},"Bias Mitigation:"," AI tools like Applied or Pymetrics for fairer screening",[193,28115,28116,28119],{},[397,28117,28118],{},"Inclusive Job Descriptions:"," Gender-neutral language and broad appeal",[193,28121,28122,28125],{},[397,28123,28124],{},"Employee Referrals:"," Structured programs to reduce unconscious bias",[12,28127,28128],{},[397,28129,28130],{},"Inclusive Workplace Design:",[190,28132,28133,28139,28144],{},[193,28134,28135,28138],{},[397,28136,28137],{},"Flexible Work:"," Remote-first policies and asynchronous communication",[193,28140,28141,28143],{},[397,28142,27812],{}," Comprehensive benefits and open conversations",[193,28145,28146,28149],{},[397,28147,28148],{},"Career Development:"," Equal opportunities for growth and advancement",[12,28151,28152],{},[397,28153,28154],{},"Measuring DEI Success:",[190,28156,28157,28163,28169],{},[193,28158,28159,28162],{},[397,28160,28161],{},"Representation Metrics:"," Track diversity across all levels",[193,28164,28165,28168],{},[397,28166,28167],{},"Inclusion Surveys:"," Regular pulse checks on belonging and fairness",[193,28170,28171,28174],{},[397,28172,28173],{},"Performance Impact:"," Correlate DEI metrics with business outcomes",[16,28176,28178],{"id":28177},"_8-stay-technically-savvy-in-an-ai-driven-world","8. Stay Technically Savvy in an AI-Driven World",[12,28180,28181],{},"As a founder, you don't need to code, but you need to understand technology deeply, especially AI.",[116,28183,28185],{"id":28184},"technical-literacy-for-founders","Technical Literacy for Founders",[12,28187,28188],{},[397,28189,28190],{},"AI Strategy:",[190,28192,28193,28199,28205],{},[193,28194,28195,28198],{},[397,28196,28197],{},"AI-First Mindset:"," Consider AI applications in every business decision",[193,28200,28201,28204],{},[397,28202,28203],{},"Ethical AI:"," Ensure responsible development and deployment",[193,28206,28207,28210],{},[397,28208,28209],{},"AI Governance:"," Policies for data privacy and algorithmic fairness",[12,28212,28213],{},[397,28214,28215],{},"Technology Trends:",[190,28217,28218,28224,28230],{},[193,28219,28220,28223],{},[397,28221,28222],{},"Web3 Integration:"," Understanding blockchain and decentralized applications",[193,28225,28226,28229],{},[397,28227,28228],{},"Edge Computing:"," Real-time processing and reduced latency",[193,28231,28232,28235],{},[397,28233,28234],{},"Sustainable Tech:"," Energy-efficient computing and green hosting",[12,28237,28238],{},[397,28239,28240],{},"Tool Stack Mastery:",[190,28242,28243,28249,28255],{},[193,28244,28245,28248],{},[397,28246,28247],{},"Productivity:"," GitHub Copilot, Notion AI, Zapier for automation",[193,28250,28251,28254],{},[397,28252,28253],{},"Analytics:"," Modern BI tools with AI-driven insights",[193,28256,28257,28259],{},[397,28258,27549],{}," AI-enhanced collaboration platforms",[16,28261,28263],{"id":28262},"_9-build-for-scale-from-day-one-but-dont-over-engineer","9. Build for Scale from Day One (But Don't Over-Engineer)",[12,28265,28266],{},"Scalability planning has changed with cloud-native architectures and AI automation.",[116,28268,28270],{"id":28269},"scalable-architecture-principles","Scalable Architecture Principles",[12,28272,28273],{},[397,28274,28275],{},"Cloud-Native Design:",[190,28277,28278,28284,28290],{},[193,28279,28280,28283],{},[397,28281,28282],{},"Microservices:"," Modular architecture for independent scaling",[193,28285,28286,28289],{},[397,28287,28288],{},"Serverless:"," Pay-for-use computing with automatic scaling",[193,28291,28292,28295],{},[397,28293,28294],{},"AI-Ops:"," Automated monitoring and incident response",[12,28297,28298],{},[397,28299,28300],{},"Data Strategy:",[190,28302,28303,28309,28315],{},[193,28304,28305,28308],{},[397,28306,28307],{},"Modern Data Stack:"," Tools like Snowflake, dbt, and Looker",[193,28310,28311,28314],{},[397,28312,28313],{},"Real-Time Analytics:"," Streaming data for immediate insights",[193,28316,28317,28320],{},[397,28318,28319],{},"Privacy-First:"," GDPR and CCPA compliance from inception",[12,28322,28323],{},[397,28324,28325],{},"Process Scalability:",[190,28327,28328,28334,28340],{},[193,28329,28330,28333],{},[397,28331,28332],{},"Automation:"," RPA and AI for repetitive business processes",[193,28335,28336,28339],{},[397,28337,28338],{},"Self-Service:"," Enable customers and employees to serve themselves",[193,28341,28342,28345],{},[397,28343,28344],{},"API-First:"," Design for integration and ecosystem building",[16,28347,28349],{"id":28348},"_10-cultivate-a-learning-organization","10. Cultivate a Learning Organization",[12,28351,28352],{},"In a world of rapid change, your startup's ability to learn and adapt is its greatest competitive advantage.",[116,28354,28356],{"id":28355},"continuous-learning-culture","Continuous Learning Culture",[12,28358,28359],{},[397,28360,28361],{},"Knowledge Management:",[190,28363,28364,28370,28376],{},[193,28365,28366,28369],{},[397,28367,28368],{},"Documentation:"," Living knowledge bases with AI-powered search",[193,28371,28372,28375],{},[397,28373,28374],{},"Learning Budgets:"," Allocate time and money for skill development",[193,28377,28378,28381],{},[397,28379,28380],{},"Cross-Pollination:"," Regular knowledge sharing across teams",[12,28383,28384],{},[397,28385,28386],{},"Innovation Practices:",[190,28388,28389,28395,28401],{},[193,28390,28391,28394],{},[397,28392,28393],{},"Hackathons:"," Quarterly innovation sprints",[193,28396,28397,28400],{},[397,28398,28399],{},"Open Innovation:"," Collaborate with external experts and researchers",[193,28402,28403,28406],{},[397,28404,28405],{},"Trend Monitoring:"," AI tools for industry and technology trend analysis",[12,28408,28409],{},[397,28410,28411],{},"Adaptation Frameworks:",[190,28413,28414,28420,28426],{},[193,28415,28416,28419],{},[397,28417,28418],{},"Scenario Planning:"," Regular exercises for different future states",[193,28421,28422,28425],{},[397,28423,28424],{},"Pivot Playbooks:"," Structured processes for strategic shifts",[193,28427,28428,28431],{},[397,28429,28430],{},"Risk Management:"," Proactive identification and mitigation of threats",[16,28433,28435],{"id":28434},"conclusion-the-2025-founder-mindset","Conclusion: The 2025 Founder Mindset",[12,28437,28438],{},"Building a startup in 2025 requires a blend of timeless entrepreneurial wisdom and cutting-edge tools and strategies. The fundamentals remain: validate relentlessly, build great teams, obsess over customers, learn from failure, and persist through challenges.",[12,28440,28441],{},"But the tools, techniques, and context have evolved dramatically. AI isn't just a tool—it's a fundamental shift in how we work, learn, and create value. Remote work isn't temporary—it's the new normal. Sustainability isn't optional—it's essential for long-term success.",[12,28443,28444],{},[397,28445,28446],{},"The most successful founders in 2025 are those who:",[190,28448,28449,28455,28461,28467,28473],{},[193,28450,28451,28454],{},[397,28452,28453],{},"Embrace technology"," while maintaining human-centered values",[193,28456,28457,28460],{},[397,28458,28459],{},"Build resilient systems"," that can adapt to constant change",[193,28462,28463,28466],{},[397,28464,28465],{},"Prioritize wellness"," as much as growth metrics",[193,28468,28469,28472],{},[397,28470,28471],{},"Foster inclusive cultures"," that leverage diverse perspectives",[193,28474,28475,28477],{},[397,28476,10249],{}," and share knowledge generously",[12,28479,28480],{},"Remember: Your startup journey isn't just about building a company—it's about creating positive impact in an increasingly complex world. Stay curious, stay adaptable, and never stop learning. The rollercoaster continues, but with the right mindset and tools, you can not only survive the ride but enjoy it immensely.",[12,28482,28483,26913],{},[397,28484,28485],{},"What's your next startup lesson? The journey awaits.",{"title":24,"searchDepth":25,"depth":25,"links":28487},[28488,28491,28494,28497,28500,28504,28507,28510,28513,28516,28519],{"id":27342,"depth":28,"text":27343,"children":28489},[28490],{"id":27349,"depth":25,"text":27350},{"id":27448,"depth":28,"text":27449,"children":28492},[28493],{"id":27455,"depth":25,"text":27456},{"id":27596,"depth":28,"text":27597,"children":28495},[28496],{"id":27603,"depth":25,"text":27604},{"id":27730,"depth":28,"text":27731,"children":28498},[28499],{"id":27737,"depth":25,"text":27738},{"id":27841,"depth":28,"text":27842,"children":28501},[28502,28503],{"id":27848,"depth":25,"text":27849},{"id":27927,"depth":25,"text":27928},{"id":27981,"depth":28,"text":27982,"children":28505},[28506],{"id":27988,"depth":25,"text":27989},{"id":28092,"depth":28,"text":28093,"children":28508},[28509],{"id":28099,"depth":25,"text":28100},{"id":28177,"depth":28,"text":28178,"children":28511},[28512],{"id":28184,"depth":25,"text":28185},{"id":28262,"depth":28,"text":28263,"children":28514},[28515],{"id":28269,"depth":25,"text":28270},{"id":28348,"depth":28,"text":28349,"children":28517},[28518],{"id":28355,"depth":25,"text":28356},{"id":28434,"depth":28,"text":28435},"Honest insights and hard-won lessons from a founder's journey: from AI-powered validation and remote teams to customer obsession, embracing failure, mental health, and sustainable growth in the modern startup landscape.",{"excerpt":28522},{"type":9,"value":28523},[28524,28526],[12,28525,27336],{},[12,28527,27339],{},"/startup-lessons",{"title":27331,"description":28520},"startup-lessons",[29,47,28532,28530,28533,10337,28534,28535],"founder-journey","business-growth","remote-work","mental-health","eFthv4yIIQ_QkBmkC3YlzmDtlf5cCQdBYrPLPFJNhxw",{"id":28538,"title":28539,"author":7,"body":28540,"category":29,"description":30,"extension":31,"image":28552,"isDraft":33,"isFeatured":34,"locale":35,"meta":28553,"navigation":33,"path":28558,"publishedAt":23053,"readingTime":369,"seo":28559,"stem":28560,"tags":28561,"updatedAt":23053,"__hash__":28564},"articles_en/steps-to-establish-a-startup-in-arab-countries.md","Steps to Establish a Startup in Arab Countries",{"type":9,"value":28541,"toc":28549},[28542,28545,28547],[12,28543,28544],{},"Learn the legal and administrative steps to establish your startup in the Arab world.",[16,28546,19],{"id":18},[12,28548,22],{},{"title":24,"searchDepth":25,"depth":25,"links":28550},[28551],{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1450101499163-c8848c66ca85?q=80&w=1200&auto=format&fit=crop",{"excerpt":28554},{"type":9,"value":28555},[28556],[12,28557,28544],{},"/steps-to-establish-a-startup-in-arab-countries",{"title":28539,"description":30},"steps-to-establish-a-startup-in-arab-countries",[29,47,28562,28563],"legal","establishment","THfMoYO7nsli9Kp5VGE3T_J_K7LvvFqzNCICRseIxLo",{"id":28566,"title":28567,"author":7,"body":28568,"category":73,"description":74,"extension":31,"image":23636,"isDraft":33,"isFeatured":34,"locale":35,"meta":28580,"navigation":33,"path":28585,"publishedAt":23195,"readingTime":2105,"seo":28586,"stem":28587,"tags":28588,"updatedAt":23195,"__hash__":28590},"articles_en/strategies-for-measuring-digital-product-success.md","Strategies for Measuring Digital Product Success",{"type":9,"value":28569,"toc":28577},[28570,28573,28575],[12,28571,28572],{},"Measuring your digital product's success requires deep understanding of the right metrics.",[16,28574,19],{"id":18},[12,28576,22],{},{"title":24,"searchDepth":25,"depth":25,"links":28578},[28579],{"id":18,"depth":28,"text":19},{"excerpt":28581},{"type":9,"value":28582},[28583],[12,28584,28572],{},"/strategies-for-measuring-digital-product-success",{"title":28567,"description":74},"strategies-for-measuring-digital-product-success",[73,23619,28589],"performance-measurement","Z2ImMU_3snqBORxXtFsCRm6m60aQPQzBH0ofaVnZfQo",{"id":28592,"title":28593,"author":7,"body":28594,"category":2127,"description":74,"extension":31,"image":23470,"isDraft":33,"isFeatured":34,"locale":35,"meta":28606,"navigation":33,"path":28611,"publishedAt":22945,"readingTime":43,"seo":28612,"stem":28613,"tags":28614,"updatedAt":22945,"__hash__":28616},"articles_en/the-importance-of-competitive-analysis-in-product-development.md","The Importance of Competitive Analysis in Product Development",{"type":9,"value":28595,"toc":28603},[28596,28599,28601],[12,28597,28598],{},"Competitive analysis helps you understand your market position and identify opportunities.",[16,28600,19],{"id":18},[12,28602,22],{},{"title":24,"searchDepth":25,"depth":25,"links":28604},[28605],{"id":18,"depth":28,"text":19},{"excerpt":28607},{"type":9,"value":28608},[28609],[12,28610,28598],{},"/the-importance-of-competitive-analysis-in-product-development",{"title":28593,"description":74},"the-importance-of-competitive-analysis-in-product-development",[73,2127,28615,2110],"competitive-analysis","gMkb7X1eD8oiP-Bw-AEkHXde7V9_TomB2eIn42uMGD0",{"id":28618,"title":28619,"author":7,"body":28620,"category":24006,"description":28733,"extension":31,"image":28734,"isDraft":34,"isFeatured":34,"locale":35,"meta":28735,"navigation":33,"path":28743,"publishedAt":28744,"readingTime":2363,"seo":28745,"stem":28736,"tags":28746,"updatedAt":28747,"__hash__":28748},"articles_en/the-importance-of-consistency.md","The Importance of Consistency",{"type":9,"value":28621,"toc":28725},[28622,28625,28629,28632,28635,28638,28641,28645,28648,28651,28654,28657,28660,28664,28667,28670,28673,28676,28679,28683,28686,28689,28692,28695,28698,28701,28705,28708,28711,28714,28717,28720,28722],[12,28623,28624],{},"Everyone wants to be successful in their endeavors, whether it's personal, academic, or professional. However, the road to success is not always easy. Many people believe that having natural talent is enough to achieve their goals. But the truth is, natural talent is only a small part of the equation. One of the most critical factors for achieving success is consistency.",[16,28626,28628],{"id":28627},"the-consistency-problem-why-talent-is-not-enough","The Consistency Problem: Why Talent Is Not Enough",[12,28630,28631],{},"Many people believe that success is all about talent. It's easy to fall into the trap of thinking that some people are simply born with abilities that we could never hope to match. However, in reality, talent is only one part of the equation. What most people don't realize is that consistency is often the true key to success.",[12,28633,28634],{},"You might be surprised to learn that many successful people didn't start out with any particular talent or skill. Rather, they simply made a commitment to being consistent in their efforts. This consistency allowed them to improve their abilities over time and ultimately achieve success.",[12,28636,28637],{},"Consistency is critical when it comes to developing new skills or habits. At first, it can be difficult to stay motivated when progress seems slow or non-existent. However, if you can make a commitment to practicing or working on a task every day, even if only for a short time, you'll start to see improvements.",[12,28639,28640],{},"The key is to focus on the process, rather than the outcome. If you can make consistency a habit, you'll start to see that progress and success are inevitable. It's not about being perfect or having innate abilities, but rather about showing up and doing the work every day. So don't get discouraged if you don't have a particular talent or skill. Focus on being consistent in your efforts, and success will follow.",[16,28642,28644],{"id":28643},"the-misconception-of-natural-talent-and-success","The Misconception of Natural Talent and Success",[12,28646,28647],{},"Have you ever heard the saying, \"Practice makes perfect\"? This statement couldn't be truer when it comes to achieving success. Many people believe that natural talent is all you need to be successful. However, in reality, talent is just the starting point.",[12,28649,28650],{},"Natural talent may give you a head start, but it can only take you so far. Talent without effort and consistency is useless. Consistency is the key to turning your natural talent into a successful outcome.",[12,28652,28653],{},"When we think about success, it's easy to focus on the final outcome and forget about the journey that led to it. We often see the end result without realizing the hard work, practice, and consistency that went into it. While it's important to have natural talent, it's not the only factor in achieving success.",[12,28655,28656],{},"Consistency is a significant factor that cannot be ignored when it comes to achieving success. Success is the result of small, daily efforts that build over time. It's about showing up every day, putting in the work, and being consistent in your efforts.",[12,28658,28659],{},"When you're consistent in your efforts, you're setting yourself up for long-term success. Consistency helps you to develop good habits that will stay with you long after you achieve your goals. It's a mindset that can be applied to any aspect of your life, from personal growth to career success.",[16,28661,28663],{"id":28662},"the-key-to-success-why-consistency-matters","The Key to Success: Why Consistency Matters",[12,28665,28666],{},"Consistency is the key to reaching your goals and improving your skills. No matter what you're trying to achieve, whether it's improving your fitness, learning a new language, or completing a work project, consistency is essential to making progress.",[12,28668,28669],{},"One of the main reasons consistency is important is that it allows you to build momentum. When you consistently work towards your goals, you build a sense of momentum that makes it easier to keep going. The more progress you make, the more motivated you become, and the more likely you are to keep pushing forward.",[12,28671,28672],{},"Consistency also helps you develop good habits. When you make a habit of working towards your goals every day, it becomes easier to do so over time. Your brain gets used to the routine, and it becomes more automatic. As a result, you're more likely to stick with it even when you don't feel like it.",[12,28674,28675],{},"In addition, consistency helps you make more efficient use of your time. When you work on something every day, you're able to make progress more quickly than if you only work on it sporadically. You don't waste time trying to remember where you left off or trying to get back into the groove of things.",[12,28677,28678],{},"Another benefit of consistency is that it helps you develop resilience. When you encounter setbacks or obstacles, consistency helps you keep going. You've already developed the habit of working towards your goals every day, so you're less likely to give up when things get tough.",[16,28680,28682],{"id":28681},"the-power-of-consistent-effort-how-small-steps-lead-to-big-results","The Power of Consistent Effort: How Small Steps Lead to Big Results",[12,28684,28685],{},"Consistent effort is one of the most critical factors in achieving success. In the short term, it may seem like you're not making any progress, but in the long run, the small daily efforts will add up, and you'll be amazed at how far you've come.",[12,28687,28688],{},"It's natural to become discouraged when progress seems slow, and you're not seeing immediate results. You may feel like giving up or losing motivation. But, by continuing to put in consistent effort, you'll start to see progress over time.",[12,28690,28691],{},"Consistent effort leads to steady progress, even if it's small. These small wins can add up to make a significant difference, and before you know it, you'll be much further ahead than when you started.",[12,28693,28694],{},"It's important to keep in mind that achieving your goals won't happen overnight. You need to be patient and keep working hard, even when it seems like you're not getting anywhere. As long as you remain consistent in your efforts, you'll see progress, and eventually, you'll reach your goal.",[12,28696,28697],{},"One of the keys to consistency is having a plan and sticking to it. Set achievable goals for yourself, and break them down into smaller, more manageable tasks. By doing this, you'll be able to track your progress and make adjustments as needed.",[12,28699,28700],{},"Remember, every little bit counts. Consistent effort, no matter how small, will lead to progress and help you achieve your goals. Stay motivated, stay consistent, and the results will come.",[16,28702,28704],{"id":28703},"embracing-consistency-making-it-a-habit-for-long-term-success","Embracing Consistency: Making It a Habit for Long-Term Success",[12,28706,28707],{},"Do you find yourself constantly waiting for the perfect moment to start working towards your goals? It's a common trap that many people fall into, but the truth is that consistency is the key to success.",[12,28709,28710],{},"The first step to making consistency a habit is to identify your goals and break them down into manageable steps. This will help you create a plan that you can stick to, instead of feeling overwhelmed by a seemingly insurmountable task.",[12,28712,28713],{},"Once you have a plan in place, commit to taking action every day. Even if it's just a small step, it's important to show up consistently and make progress toward your goal.",[12,28715,28716],{},"It's also important to hold yourself accountable and stay motivated. Celebrate your successes, no matter how small, and don't be too hard on yourself if you miss a day. Remember, consistency is about progress, not perfection.",[12,28718,28719],{},"By making consistency a habit, you'll be able to build momentum and achieve your goals faster than you ever thought possible. So, don't wait for the perfect moment to start. Embrace the power of consistency and take action toward your dreams today.",[16,28721,301],{"id":300},[12,28723,28724],{},"Consistency is key to achieving success, whether it's in your personal or professional life. By making small, daily efforts towards your goals, you can make significant progress over time. Remember, success isn't achieved overnight, but with consistent effort, you can reach your goals and achieve the success you desire.",{"title":24,"searchDepth":25,"depth":25,"links":28726},[28727,28728,28729,28730,28731,28732],{"id":28627,"depth":28,"text":28628},{"id":28643,"depth":28,"text":28644},{"id":28662,"depth":28,"text":28663},{"id":28681,"depth":28,"text":28682},{"id":28703,"depth":28,"text":28704},{"id":300,"depth":28,"text":301},"Consistency is key to success, and natural talent is just one small factor. By making a consistent effort, you can steadily progress toward your goals and achieve surprising results. Don't wait for inspiration to strike, embrace consistency as a habit.","https://images.unsplash.com/photo-1551814360-3c38192c5688?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDExfHxjb25zaXN0ZW5jeXxlbnwwfHx8fDE2NzY3MjYxNDA&ixlib=rb-4.0.3&q=80&w=2000",{"slug":28736,"excerpt":28737},"the-importance-of-consistency",{"type":9,"value":28738},[28739,28741],[12,28740,28624],{},[16,28742,28628],{"id":28627},"/the-importance-of-consistency","2023-02-18T13:31:18.000Z",{"title":28619,"description":28733},[340,341,2079,342],"2024-05-29T14:15:50.000Z","ZWnw3LlN1TBETz0J_0HVnTpWtpoiWJJi1k09p6QMLTU",{"id":28750,"title":28751,"author":7,"body":28752,"category":373,"description":28756,"extension":31,"image":28831,"isDraft":34,"isFeatured":33,"locale":35,"meta":28832,"navigation":33,"path":28840,"publishedAt":28841,"readingTime":2341,"seo":28842,"stem":28833,"tags":28843,"updatedAt":28844,"__hash__":28845},"articles_en/the-importance-of-mindset-in-learning.md","The Importance of Mindset in Learning",{"type":9,"value":28753,"toc":28821},[28754,28757,28761,28764,28768,28771,28775,28778,28782,28785,28789,28792,28796,28799,28803,28806,28810,28813,28816],[12,28755,28756],{},"Our mindset is crucial when teaching ourselves any new skills, not just programming. In fact, our mindset will have more of an impact on our chances of success than almost anything else.",[16,28758,28760],{"id":28759},"a-positive-attitude-is-key","A Positive Attitude is Key",[12,28762,28763],{},"A positive attitude can help us approach challenges with determination and resilience. When we believe in our ability to learn and grow, we are more likely to persevere through difficult parts of the learning process and overcome obstacles.",[16,28765,28767],{"id":28766},"a-growth-mindset-is-essential","A Growth Mindset is Essential",[12,28769,28770],{},"Having a growth mindset is essential for effective learning. When we believe that our abilities can be developed through effort and learning, we are more likely to take on challenges and seek out feedback and new experiences that can help us improve.",[16,28772,28774],{"id":28773},"fixed-mindsets-hold-us-back","Fixed Mindsets Hold Us Back",[12,28776,28777],{},"On the other hand, a fixed mindset can hold us back. If we believe that our abilities are fixed and cannot be changed, we may be more likely to give up when faced with difficult tasks or setbacks. This can prevent us from achieving our full potential as learners.",[16,28779,28781],{"id":28780},"intelligence-can-be-developed","Intelligence Can Be Developed",[12,28783,28784],{},"It's important to remember that intelligence is not fixed. Someone with a growth mindset believes they can get better at anything with effort and persistence. By believing that we can learn new skills and develop new talents, we open ourselves up to the possibility of achieving our goals and reaching our full potential.",[16,28786,28788],{"id":28787},"embrace-struggles-and-challenges","Embrace Struggles and Challenges",[12,28790,28791],{},"Struggling with something is growth. That's a natural part of the learning process. It is an opportunity to grow and improve, rather than a sign of failure or inability. When we encounter a difficult concept or problem, we should try to approach it with a growth mindset. This means believing that we can learn and grow through effort and persistence. We should embrace the struggles we encounter while learning. We should not see them as roadblocks but as opportunities for growth and development.",[16,28793,28795],{"id":28794},"keep-pushing-forward","Keep Pushing Forward",[12,28797,28798],{},"We should persevere through challenges and keep working towards our goals, even when things get difficult. This is what persistence and grit are all about. We should celebrate our persistence and determination when we overcome a challenge. This can give us a sense of accomplishment and motivate us to continue learning and growing.",[16,28800,28802],{"id":28801},"real-learning-happens-through-struggle","Real Learning Happens Through Struggle",[12,28804,28805],{},"We must remember that real learning happens when we push ourselves to grow and improve, even through struggles and challenges. We should embrace these opportunities and keep working towards our goals. When we are questioning our abilities, we should reflect on successes we have already achieved while learning to program. This is proof that we can do it.",[16,28807,28809],{"id":28808},"believe-in-yourself-and-your-ability-to-learn","Believe in Yourself and Your Ability to Learn",[12,28811,28812],{},"Ultimately, we must believe in ourselves and our ability to learn and grow. We must keep a growth mindset and persist through challenges. This is how real learning happens. It is important to discover our motivation for learning. We might be motivated by a desire to develop new technical skills, create useful stuff, or advance our careers. We should reflect on why we are interested in learning a new skill and what we hope to achieve by mastering it. We should identify our motivation for learning the skill and set specific, achievable goals that align with our reasons for learning. We should use our motivation to help us stay focused and motivated as we work through the learning process. Lastly, we should track our progress and celebrate our successes along the way.",[12,28814,28815],{},"As The Odin Project says:",[23807,28817,28818],{},[12,28819,28820],{},"\"Whatever it is, hold on tightly to your motivation - this will be what pulls you through to the end of this journey, giving you a definitive goal to aim towards.\"",{"title":24,"searchDepth":25,"depth":25,"links":28822},[28823,28824,28825,28826,28827,28828,28829,28830],{"id":28759,"depth":28,"text":28760},{"id":28766,"depth":28,"text":28767},{"id":28773,"depth":28,"text":28774},{"id":28780,"depth":28,"text":28781},{"id":28787,"depth":28,"text":28788},{"id":28794,"depth":28,"text":28795},{"id":28801,"depth":28,"text":28802},{"id":28808,"depth":28,"text":28809},"https://images.unsplash.com/photo-1454165804606-c3d57bc86b40?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDcwfHxtaW5kc2V0JTIwbGVhcm5pbmd8ZW58MHx8fHwxNjcxMTQwOTY5&ixlib=rb-4.0.3&q=80&w=2000",{"slug":28833,"excerpt":28834},"the-importance-of-mindset-in-learning",{"type":9,"value":28835},[28836,28838],[12,28837,28756],{},[16,28839,28760],{"id":28759},"/the-importance-of-mindset-in-learning","2022-12-15T21:52:33.000Z",{"title":28751,"description":28756},[341,2079,342],"2022-12-15T22:28:51.000Z","lzfa7-hD7APXrCo6PWIvQvFhFgckj-b2P-gr_cx43pw",{"id":28847,"title":28848,"author":7,"body":28849,"category":24006,"description":28853,"extension":31,"image":28938,"isDraft":34,"isFeatured":34,"locale":35,"meta":28939,"navigation":33,"path":28947,"publishedAt":28948,"readingTime":2341,"seo":28949,"stem":28940,"tags":28950,"updatedAt":2080,"__hash__":28951},"articles_en/the-power-of-skills-over-degrees-a-6-month-plan-for-a-better-life.md","The Power of Skills Over Degrees: A 6-Month Plan for a Better Life",{"type":9,"value":28850,"toc":28932},[28851,28854,28857,28861,28864,28867,28870,28874,28877,28894,28898,28901,28924,28926,28929],[12,28852,28853],{},"A degree might help you get your foot in the door for a job, but true wealth comes from your skills. And the good news is, you don't have to spend years acquiring these skills. In just 6 months, you can completely change your life for the better.",[12,28855,28856],{},"In this article, we'll break down the process of acquiring new skills that can bring you real wealth, both financially and personally.",[16,28858,28860],{"id":28859},"why-skills-matter-more-than-degrees","Why Skills Matter More Than Degrees",[12,28862,28863],{},"It's no secret that getting a degree is a huge accomplishment, but unfortunately, having a degree is no guarantee of success. With thousands of people having similar qualifications, it's important to differentiate yourself in order to increase your chances of success.",[12,28865,28866],{},"So, how can you set yourself apart? The answer is simple: acquire a set of in-demand skills that make you valuable to employers. These skills can come in many forms, including technical skills, soft skills, or a unique combination of both. Regardless of the type of skills you acquire, they will make you irreplaceable and give you a competitive edge in the job market.",[12,28868,28869],{},"Employers are always looking for individuals who bring something extra to the table, and having a set of valuable skills can make all the difference. So, don't rely solely on your degree – take the time to acquire new skills and set yourself apart from the competition. Your future success depends on it.",[16,28871,28873],{"id":28872},"the-benefits-of-acquiring-new-skills","The Benefits of Acquiring New Skills",[12,28875,28876],{},"There are many benefits to acquiring new skills, beyond just the financial benefits. Here are a few of the most significant:",[190,28878,28879,28882,28885,28888,28891],{},[193,28880,28881],{},"Increased job security: With a variety of skills, you're less likely to become obsolete in the job market. You'll be more versatile and able to adapt to changes in your industry.",[193,28883,28884],{},"Higher earning potential: In-demand skills often command higher salaries. By acquiring new skills, you can potentially increase your earning power.",[193,28886,28887],{},"Personal satisfaction: Learning new skills can be incredibly fulfilling. It can help you feel more confident and capable and give you a sense of purpose.",[193,28889,28890],{},"Increased creativity: Acquiring new skills can also help you become more creative. By exposing yourself to new ideas, techniques, and perspectives, you can stimulate your imagination and unleash your creative potential.",[193,28892,28893],{},"Better problem-solving skills: New skills often require the development of problem-solving abilities, which are highly valuable in the workplace and in life. With improved problem-solving skills, you'll be able to tackle complex challenges with ease and develop creative solutions.",[16,28895,28897],{"id":28896},"how-to-acquire-new-skills-in-just-6-months","How to Acquire New Skills in Just 6 Months",[12,28899,28900],{},"Acquiring new skills can be a game-changer for your career and financial success. However, many people struggle with where to start and how to stay motivated throughout the process. In this section, we will break down the steps to help you acquire new skills in just 6 months.",[675,28902,28903,28906,28909,28912,28915,28918,28921],{},[193,28904,28905],{},"Identify the Skill You Want to Acquire: The first step is to identify the skill you want to acquire. Start by researching what skills are in demand in your field or industry. Ask yourself, \"What skills do I want to acquire?\" and \"What are my career and financial goals?\"",[193,28907,28908],{},"Identify Your Goals and Set Achievable Ones: Break down the process of acquiring the skill into smaller, achievable goals. Set deadlines for each goal and track your progress. This will help you stay motivated and on track.",[193,28910,28911],{},"Create a Learning Plan: Decide how you will acquire each skill. Will you take classes, read books, or watch tutorials? Make a plan for each skill and set a timeline for completion. Seek out experienced professionals in your desired field or industry.",[193,28913,28914],{},"Dedicate Time Each Day: Consistency is key. Dedicate a certain amount of time each day to learning and practicing your new skills. Put your new skills into action.",[193,28916,28917],{},"Network and Collaborate: Connect with others who are interested in acquiring the same skills. Network with professionals in your field, and collaborate with others to practice and refine your skills.",[193,28919,28920],{},"Seek Feedback: Seek out constructive feedback from others. Use it to improve your skills.",[193,28922,28923],{},"Celebrate Your Progress: Celebrate your accomplishments and remind yourself of how far you've come. This will help keep you motivated as you continue on your journey.",[16,28925,301],{"id":300},[12,28927,28928],{},"A degree might help you get a job, but true wealth comes from the skills you possess. In just 6 months, you can acquire new skills that will change your life for the better. With dedication and a solid plan, you can make significant progress toward your career and financial goals.",[12,28930,28931],{},"So why wait? Start your journey today and discover the power of skills over degrees.",{"title":24,"searchDepth":25,"depth":25,"links":28933},[28934,28935,28936,28937],{"id":28859,"depth":28,"text":28860},{"id":28872,"depth":28,"text":28873},{"id":28896,"depth":28,"text":28897},{"id":300,"depth":28,"text":301},"https://images.unsplash.com/photo-1537444532052-2afbf769b76c?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDE5fHxiZXR0ZXIlMjBsaWZlfGVufDB8fHx8MTY3NTU5NjUxMw&ixlib=rb-4.0.3&q=80&w=2000",{"slug":28940,"excerpt":28941},"the-power-of-skills-over-degrees-a-6-month-plan-for-a-better-life",{"type":9,"value":28942},[28943,28945],[12,28944,28853],{},[12,28946,28856],{},"/the-power-of-skills-over-degrees-a-6-month-plan-for-a-better-life","2023-02-05T11:39:20.000Z",{"title":28848,"description":28853},[340,341,2079,342],"jRjCVE7cUE2UoPx3sQ12IaYZGEfKnqNIFHt8MCYOs0I",{"id":28953,"title":28954,"author":7,"body":28955,"category":373,"description":28959,"extension":31,"image":29023,"isDraft":34,"isFeatured":34,"locale":35,"meta":29024,"navigation":33,"path":29032,"publishedAt":29033,"readingTime":25,"seo":29034,"stem":29025,"tags":29035,"updatedAt":29036,"__hash__":29037},"articles_en/tips-for-improving-your-web-development-skills.md","Tips for Improving Your Web Development Skills",{"type":9,"value":28956,"toc":29015},[28957,28960,28964,28967,28970,28974,28977,28980,28984,28987,28990,28994,28997,29000,29004,29007,29010,29012],[12,28958,28959],{},"As a web developer, it's important to continually improve your skills and stay up-to-date with the latest technologies and best practices in the field. Here are some strategies for doing just that:",[16,28961,28963],{"id":28962},"attend-conferences-and-workshops","Attend Conferences and Workshops",[12,28965,28966],{},"Attending conferences and workshops is a great way to learn about new technologies, best practices, and industry trends. Many conferences offer a variety of sessions and tracks, so you can choose the topics that most interest you.",[12,28968,28969],{},"Not only will you learn from experts in the field, but you'll also have the opportunity to network with other professionals and build connections that can be valuable in your career. Conferences and workshops can also be a great source of inspiration, as you'll get to see what others are working on and how they're tackling different challenges.",[16,28971,28973],{"id":28972},"read-blogs-and-online-articles","Read Blogs and Online Articles",[12,28975,28976],{},"There are many blogs and online articles that cover web development topics. Follow a few that you find interesting and informative, and make a habit of reading them regularly. Not only will you learn about new technologies and best practices, but you'll also get a sense of what's happening in the industry as a whole.",[12,28978,28979],{},"In addition to reading general web development blogs, you can also look for more specialized blogs that focus on specific technologies or approaches. This can be a great way to get in-depth knowledge and insights from experts in those areas.",[16,28981,28983],{"id":28982},"learn-from-others","Learn from Others",[12,28985,28986],{},"Don't be afraid to ask for help or advice from other developers. Many developers are happy to share their knowledge and experience, and you can learn a lot from those who have been working in the field for a while.",[12,28988,28989],{},"One way to learn from others is to join online communities or forums where developers discuss web development topics. You can ask questions, share your own experiences, and get feedback from others. You can also look for local meetups or user groups where you can connect with other developers in person.",[16,28991,28993],{"id":28992},"experiment-and-try-new-things","Experiment and Try New Things",[12,28995,28996],{},"One of the best ways to improve your skills is to try new things. Experiment with different technologies and approaches, and don't be afraid to make mistakes. You'll learn a lot from your successes and failures, and you'll become more comfortable with new technologies as you gain experience.",[12,28998,28999],{},"In addition to experimenting on your own, you can also look for opportunities to work on projects with other developers. Collaborating with others can be a great way to learn from each other and gain new perspectives.",[16,29001,29003],{"id":29002},"take-online-courses","Take Online Courses",[12,29005,29006],{},"There are many online courses and tutorials available that can help you learn new skills and technologies. Look for courses that are taught by experienced developers and cover topics that are relevant to your interests and goals.",[12,29008,29009],{},"Online courses can be a convenient and flexible way to learn, as you can usually work at your own pace and fit your learning around your schedule. Many courses also include quizzes, assignments, and projects to help you apply what you've learned and consolidate your knowledge.",[16,29011,301],{"id":300},[12,29013,29014],{},"By following these tips, you can continually improve your web development skills and stay up-to-date with the latest technologies and best practices in the field. With hard work and dedication, you can become a top-notch web developer and build successful websites and web applications.",{"title":24,"searchDepth":25,"depth":25,"links":29016},[29017,29018,29019,29020,29021,29022],{"id":28962,"depth":28,"text":28963},{"id":28972,"depth":28,"text":28973},{"id":28982,"depth":28,"text":28983},{"id":28992,"depth":28,"text":28993},{"id":29002,"depth":28,"text":29003},{"id":300,"depth":28,"text":301},"https://images.unsplash.com/photo-1518818608552-195ed130cdf4?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDI1fHxwcm9ncmFtbWluZyUyMGxhbmd1YWdlfGVufDB8fHx8MTY3MTE1NDE5OQ&ixlib=rb-4.0.3&q=80&w=2000",{"slug":29025,"excerpt":29026},"tips-for-improving-your-web-development-skills",{"type":9,"value":29027},[29028,29030],[12,29029,28959],{},[16,29031,28963],{"id":28962},"/tips-for-improving-your-web-development-skills","2022-12-16T09:53:38.000Z",{"title":28954,"description":28959},[340,341,2078,2079,342],"2022-12-16T10:49:53.000Z","f9rjA0g02WRwAoH62m3Zi_DMNprGiIcdc-E6P8kqjZE",{"id":29039,"title":29040,"author":7,"body":29041,"category":73,"description":29047,"extension":31,"image":29116,"isDraft":34,"isFeatured":34,"locale":35,"meta":29117,"navigation":33,"path":29127,"publishedAt":29128,"readingTime":25,"seo":29129,"stem":29118,"tags":29130,"updatedAt":29131,"__hash__":29132},"articles_en/ui-ux-designers.md","UI/UX Designers, High in Demand",{"type":9,"value":29042,"toc":29109},[29043,29048,29051,29054,29058,29061,29065,29068,29072,29075,29079,29082,29086,29089,29106],[23807,29044,29045],{},[12,29046,29047],{},"User experience (UX) and user interface (UI) designers are in high demand because they play a critical role in how people interact with technology. They are responsible for creating designs that are not only aesthetically pleasing but also easy to use and navigate.",[12,29049,29050],{},"In today's digital age, the importance of user experience (UX) and user interface (UI) design cannot be overstated. With so many options available, users expect quick and efficient experiences that are easy to navigate and visually appealing. This is where UI/UX designers come in – they are responsible for creating interfaces and experiences that meet the needs and expectations of users.",[12,29052,29053],{},"Here's why UI/UX designers are in high demand:",[16,29055,29057],{"id":29056},"the-importance-of-user-experience","The importance of user experience",[12,29059,29060],{},"User experience (UX) is about how a person feels when interacting with a product, system, or service. It encompasses all aspects of the end-users interaction with a company, its services, and its products. A good UX can make a product or service easy to use, enjoyable, and efficient, while a poor UX can drive users away.",[16,29062,29064],{"id":29063},"the-role-of-user-interface-design","The role of user interface design",[12,29066,29067],{},"User interface (UI) design is all about how a product or service looks and feels. It involves creating the visual elements and layout of a product or service, as well as determining how users will interact with it. A good UI designer will create interfaces that are visually appealing and easy to use, while also considering the needs and goals of the user.",[16,29069,29071],{"id":29070},"the-demand-for-skilled-uiux-designers","The demand for skilled UI/UX designers",[12,29073,29074],{},"With the increasing importance of UX and UI, the demand for skilled designers is on the rise. Companies of all sizes are looking for designers who can create engaging and intuitive experiences for their users. This demand is only expected to increase in the coming years, making it a great time to consider a career in UI/UX design.",[16,29076,29078],{"id":29077},"the-potential-for-a-lucrative-career","The potential for a lucrative career",[12,29080,29081],{},"In addition to the high demand for UI/UX designers, the potential for a lucrative career is another reason to consider this field. According to Glassdoor, the average salary for a UI/UX designer in the United States is $80,928 per year. With the right skills and experience, it's possible to earn even more.",[16,29083,29085],{"id":29084},"how-to-become-a-uiux-designer","How to become a UI/UX designer",[12,29087,29088],{},"If you're interested in becoming a UI/UX designer, there are a few key steps you can take:",[675,29090,29091,29094,29097,29100,29103],{},[193,29092,29093],{},"Learn the basics: Familiarize yourself with the principles of UX and UI design, as well as the tools and technologies used in the field.",[193,29095,29096],{},"Build a portfolio: Create a portfolio of your work to showcase your skills and capabilities. This can include projects you've completed as part of your studies, as well as personal projects.",[193,29098,29099],{},"Get certified: Consider earning a certification in UX or UI design. This can help you stand out in the job market and demonstrate your knowledge and skills to potential employers.",[193,29101,29102],{},"Build your network: Connect with other designers and professionals in the field. This can be done through online communities, meetups, and networking events.",[193,29104,29105],{},"Find a job: Once you have the skills and experience needed, start searching for job openings in UI/UX design. Be sure to optimize your resume and portfolio for SEO to increase your chances of being found by potential employers.",[12,29107,29108],{},"Overall, UI/UX design is a high-demand field with great potential for a lucrative career. If you have an interest in design and a desire to create engaging and intuitive experiences for users, it's worth considering a career in UI/UX design.",{"title":24,"searchDepth":25,"depth":25,"links":29110},[29111,29112,29113,29114,29115],{"id":29056,"depth":28,"text":29057},{"id":29063,"depth":28,"text":29064},{"id":29070,"depth":28,"text":29071},{"id":29077,"depth":28,"text":29078},{"id":29084,"depth":28,"text":29085},"https://images.unsplash.com/photo-1531403009284-440f080d1e12?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDE1fHxVSSUyMFVYJTIwRGVzaWduZXIlMjB8ZW58MHx8fHwxNjcxMTUxMDI3&ixlib=rb-4.0.3&q=80&w=2000",{"slug":29118,"excerpt":29119},"ui-ux-designers",{"type":9,"value":29120},[29121,29125],[23807,29122,29123],{},[12,29124,29047],{},[12,29126,29050],{},"/ui-ux-designers","2022-12-16T20:00:25.000Z",{"title":29040,"description":29047},[340,341,2079,342],"2023-04-17T10:52:48.000Z","QFcJsLsVWQrFfCWvbDYkNX7AnNGqw8HXmDa6PAnheLc",{"id":29134,"title":29135,"author":7,"body":29136,"category":373,"description":29194,"extension":31,"image":29195,"isDraft":34,"isFeatured":34,"locale":35,"meta":29196,"navigation":33,"path":29204,"publishedAt":29205,"readingTime":25,"seo":29206,"stem":29197,"tags":29207,"updatedAt":2080,"__hash__":29208},"articles_en/unity-engine-reusable-and-scalable-codes.md","Unity Engine: Reusable and Scalable Codes",{"type":9,"value":29137,"toc":29186},[29138,29141,29145,29148,29152,29155,29159,29162,29166,29169,29173,29176,29180,29183],[12,29139,29140],{},"Creating modular and reusable code in Unity is an important concept for efficient game development. Here are a few tips to help you make your code more modular, organized, and reusable:",[16,29142,29144],{"id":29143},"use-scriptableobjects","Use ScriptableObjects:",[12,29146,29147],{},"ScriptableObjects are data containers that can be used to store and organize game data, such as settings, item properties, and character stats. They can be easily edited and modified in the Unity editor and can be shared across multiple scripts and scenes. This makes it easy to change game data without having to dig through and modify multiple scripts.",[16,29149,29151],{"id":29150},"utilize-interfaces","Utilize interfaces:",[12,29153,29154],{},"Interfaces are a way to define a contract for certain functionality that a class must implement. By using interfaces, you can create more flexible and reusable code that can be easily extended or modified. This allows you to create a blueprint of what a class should look like, making it simpler to swap out or add new classes without breaking existing code.",[16,29156,29158],{"id":29157},"create-helper-classes-and-functions","Create helper classes and functions:",[12,29160,29161],{},"Helper classes and functions can be used to encapsulate common functionality, such as mathematical operations or input handling. By creating these helpers, you can keep your code organized and reduce duplicated logic. This also makes it easier to test and debug your code.",[16,29163,29165],{"id":29164},"use-the-single-responsibility-principle","Use the Single Responsibility Principle:",[12,29167,29168],{},"The Single Responsibility Principle states that a class should have one, and only one reason to change. By adhering to this principle, you can create classes that are focused on a specific task, making them more reusable and testable. This also makes it easier to understand and work with individual classes.",[16,29170,29172],{"id":29171},"use-the-dependency-injection-pattern","Use the Dependency Injection pattern:",[12,29174,29175],{},"Dependency injection is a design pattern that allows you to decouple your code by injecting dependencies into a class rather than creating them within the class. This makes your code more flexible, testable, and reusable. It also makes it easier to swap out different implementations of a dependency without having to change the dependent class.",[16,29177,29179],{"id":29178},"refactor-your-code-regularly","Refactor your code regularly:",[12,29181,29182],{},"As your game grows, it’s important to regularly review and refactor your code to ensure it stays organized and easy to maintain. This can involve renaming variables, refactoring functions, or even breaking up large classes into smaller ones. This will make it easier to add new features and fix bugs in the future.",[12,29184,29185],{},"By following these tips and principles, you can create more modular, organized, and reusable code that is easier to maintain and extend as your game grows. This will save you time and resources in the long run and help you create a more polished and stable game",{"title":24,"searchDepth":25,"depth":25,"links":29187},[29188,29189,29190,29191,29192,29193],{"id":29143,"depth":28,"text":29144},{"id":29150,"depth":28,"text":29151},{"id":29157,"depth":28,"text":29158},{"id":29164,"depth":28,"text":29165},{"id":29171,"depth":28,"text":29172},{"id":29178,"depth":28,"text":29179},"Creating modular and reusable code in Unity is an important concept for efficient game development. Here are a few tips to help you make your code more modular, organized, and reusable: Use ScriptableObjects: ScriptableObjects are data containers that can be used to store and organize game data, such as settings, item properties, and character stats.","__GHOST_URL__/content/images/2023/01/DSC_4044.JPG",{"slug":29197,"excerpt":29198},"unity-engine-reusable-and-scalable-codes",{"type":9,"value":29199},[29200,29202],[12,29201,29140],{},[16,29203,29144],{"id":29143},"/unity-engine-reusable-and-scalable-codes","2023-01-29T13:12:14.000Z",{"title":29135,"description":29194},[340,342],"n1HsnPPn6alToiYjommGc8oi1TEDvUARUnMf--omfUU",{"id":29210,"title":29211,"author":7,"body":29212,"category":73,"description":74,"extension":31,"image":23607,"isDraft":33,"isFeatured":34,"locale":35,"meta":29224,"navigation":33,"path":29229,"publishedAt":23504,"readingTime":82,"seo":29230,"stem":29231,"tags":29232,"updatedAt":23504,"__hash__":29234},"articles_en/user-retention-strategies.md","User Retention Strategies",{"type":9,"value":29213,"toc":29221},[29214,29217,29219],[12,29215,29216],{},"Retaining users is more important than acquiring new ones.",[16,29218,19],{"id":18},[12,29220,22],{},{"title":24,"searchDepth":25,"depth":25,"links":29222},[29223],{"id":18,"depth":28,"text":19},{"excerpt":29225},{"type":9,"value":29226},[29227],[12,29228,29216],{},"/user-retention-strategies",{"title":29211,"description":74},"user-retention-strategies",[73,23001,29233],"user-growth","UFyzb-KJ9gICrQQu-yCydGKFMxREUFLr9923wAa08_c",{"id":29236,"title":29237,"author":7,"body":29238,"category":1829,"description":29265,"extension":31,"image":29266,"isDraft":33,"isFeatured":34,"locale":35,"meta":29267,"navigation":33,"path":29272,"publishedAt":1838,"readingTime":1839,"seo":29273,"stem":29274,"tags":29275,"updatedAt":1838,"__hash__":29279},"articles_en/vaw-training-gamified-health-platform-case-study.md","VAW Training: Gamified Health Training Platform",{"type":9,"value":29239,"toc":29259},[29240,29243,29245,29247,29249,29251,29253,29255,29257],[12,29241,29242],{},"Deep dive into VAW Training, an innovative platform that combines gaming with healthcare for patient training and scientific data collection.",[16,29244,1801],{"id":1800},[12,29246,1804],{},[16,29248,1808],{"id":1807},[12,29250,1804],{},[16,29252,1814],{"id":1813},[12,29254,1804],{},[16,29256,1820],{"id":1819},[12,29258,1804],{},{"title":24,"searchDepth":25,"depth":25,"links":29260},[29261,29262,29263,29264],{"id":1800,"depth":28,"text":1801},{"id":1807,"depth":28,"text":1808},{"id":1813,"depth":28,"text":1814},{"id":1819,"depth":28,"text":1820},"Case study of VAW Training, a product connecting games with healthcare to help doctors train patients and collect health data scientifically.","https://images.unsplash.com/photo-1576091160399-112ba8d25d1d?q=80&w=1200&auto=format&fit=crop",{"excerpt":29268},{"type":9,"value":29269},[29270],[12,29271,29242],{},"/vaw-training-gamified-health-platform-case-study",{"title":29237,"description":29265},"vaw-training-gamified-health-platform-case-study",[1829,73,29276,29277,29278],"healthtech","gamification","data-analytics","jwegTJhySiWgHy-xsQl6Bwy5NN02RdBJYY4Wt4Dzceg",{"id":29281,"title":29282,"author":7,"body":29283,"category":373,"description":360,"extension":31,"image":29295,"isDraft":33,"isFeatured":34,"locale":35,"meta":29296,"navigation":33,"path":29301,"publishedAt":23748,"readingTime":1432,"seo":29302,"stem":29303,"tags":29304,"updatedAt":23748,"__hash__":29307},"articles_en/version-control-with-git.md","Version Control with Git",{"type":9,"value":29284,"toc":29292},[29285,29288,29290],[12,29286,29287],{},"Mastering Git is essential for any modern professional developer.",[16,29289,19],{"id":18},[12,29291,22],{},{"title":24,"searchDepth":25,"depth":25,"links":29293},[29294],{"id":18,"depth":28,"text":19},"https://images.unsplash.com/photo-1556075798-4825dfaaf498?q=80&w=1200&auto=format&fit=crop",{"excerpt":29297},{"type":9,"value":29298},[29299],[12,29300,29287],{},"/version-control-with-git",{"title":29282,"description":360},"version-control-with-git",[373,7700,29305,29306],"version-control","github","-L9YmfbGdIsrDqwRTbWf4F_2OkkrylYYbcnKtlxv6pY",{"id":29309,"title":29310,"author":7,"body":29311,"category":373,"description":29370,"extension":31,"image":29371,"isDraft":34,"isFeatured":34,"locale":35,"meta":29372,"navigation":33,"path":29380,"publishedAt":29381,"readingTime":2341,"seo":29382,"stem":29373,"tags":29383,"updatedAt":29384,"__hash__":29385},"articles_en/will-artificial-intelligence-kill-creativity-in-video-game-development.md","Artificial Intelligence Powered Tools And Video Game Development?",{"type":9,"value":29312,"toc":29365},[29313,29317,29320,29323,29326,29330,29335,29338,29341,29344,29347,29351,29356,29359,29362],[16,29314,29316],{"id":29315},"growth-and-challenges-of-video-game-development","Growth and Challenges of Video Game Development:",[12,29318,29319],{},"The video game industry has experienced significant growth in recent years, driven by the increasing popularity of mobile gaming and advancements in technology. According to a report by Newzoo, the global video game market reached $159.3 billion in 2020, with a year-over-year growth rate of 9.3%. Additionally, a report by App Annie estimates that global mobile gaming revenue has reached $100 billion in 2021.",[12,29321,29322],{},"However, this growth also means that game developers are under pressure to deliver high-quality games within tight deadlines and with limited resources. A survey by the International Game Developers Association (IGDA) found that 70% of game developers work more than 40 hours a week, with 28% working more than 60 hours a week. Additionally, 69% of game developers reported working on projects with unrealistic deadlines, and 61% reported working on projects with unrealistic budgets.",[12,29324,29325],{},"To address these challenges, game developers are constantly searching for ways to improve their workflow and efficiency. This includes seeking out new technologies and tools, as well as implementing best practices for project management and team collaboration. By finding ways to streamline their development process and make the most of their resources, developers are able to deliver high-quality games to players while staying on schedule and within budget.",[16,29327,29329],{"id":29328},"can-ai-help-addressing-some-of-these-problems","Can AI Help Addressing Some Of These problems?",[12,29331,29332],{},[4025,29333],{"alt":24,"src":29334},"__GHOST_URL__/content/images/2023/01/ai-in-gaming-main-1600-1.jpg",[12,29336,29337],{},"Artificial Intelligence (AI) is taking the video game industry by storm and changing the way games are designed, developed, and played. Imagine being able to create a game that adapts to the player's behavior, generates new levels on the fly, and creates realistic NPCs that can hold a conversation with you. Well, all of that and more is possible thanks to the power of AI.",[12,29339,29340],{},"One of the most exciting aspects of AI in game development is its ability to assist in game design. Game designers can use AI-powered tools to generate level layouts, NPC behaviors, and quest chains with ease. This not only saves designers time but also allows them to create more complex and varied game content. For example, AI can simulate player behavior and identify potential bugs or performance issues, helping developers fix problems before a game is released and improving the overall player experience.",[12,29342,29343],{},"AI-powered tools can also be used to create game assets such as 3D models and animations. This automates the process of creating assets and saves time and resources, allowing developers to focus on more important tasks such as creating engaging gameplay experiences.",[12,29345,29346],{},"In addition, AI can be used to create intelligent and adaptive gameplay, by tracking the player's progress and adjusting the game's difficulty accordingly. This keeps players engaged and ensures that the game is challenging but not frustrating. And that's just the tip of the iceberg, with AI-powered natural language processing (NLP) NPCs can have more realistic and dynamic behaviors and also help in creating more natural language-based interactions with the players.",[16,29348,29350],{"id":29349},"ai-powered-tools-and-creativity","AI-Powered Tools and Creativity:",[12,29352,29353],{},[4025,29354],{"alt":24,"src":29355},"__GHOST_URL__/content/images/2023/01/Screenshot_136.png",[12,29357,29358],{},"As the use of Artificial Intelligence in game development becomes more prevalent, one question that arises is the impact it has on creativity and artistry in the industry. While these tools can assist in game design and help automate the process of creating assets, some artists and game developers are concerned that it could lead to a loss of creativity and originality. On one hand, AI-generated art and assets can save time and resources for developers, allowing them to focus on more important tasks such as creating engaging gameplay experiences and unique game content that would be difficult or impossible to create manually.",[12,29360,29361],{},"On the other hand, some artists argue that the use of these tools can lead to a homogenization of game content, as the same algorithms and techniques are used to create assets, resulting in a lack of diversity and originality in games, and the potential loss of the unique styles and perspectives that human artists bring to the table. For example, some artists may worry that AI-generated art and assets may lack the personal touch and unique perspective that a human artist would bring to the table.",[12,29363,29364],{},"Furthermore, the use of these tools can also raise ethical concerns, as it can lead to the displacement of human artists and designers from their jobs, and questions about the ownership and copyright of AI-generated art. For example, some artists may worry that the use of AI-generated art and assets could lead to the displacement of human artists, and raise questions about the ownership and copyright of AI-generated art.",{"title":24,"searchDepth":25,"depth":25,"links":29366},[29367,29368,29369],{"id":29315,"depth":28,"text":29316},{"id":29328,"depth":28,"text":29329},{"id":29349,"depth":28,"text":29350},"Growth and Challenges of Video Game Development: The video game industry has experienced significant growth in recent years, driven by the increasing popularity of mobile gaming and advancements in technology. According to a report by Newzoo, the global video game market reached $159.","__GHOST_URL__/content/images/2023/01/sony_santa_monica.0-1.jpg",{"slug":29373,"excerpt":29374},"will-artificial-intelligence-kill-creativity-in-video-game-development",{"type":9,"value":29375},[29376,29378],[16,29377,29316],{"id":29315},[12,29379,29319],{},"/will-artificial-intelligence-kill-creativity-in-video-game-development","2023-01-23T09:00:12.000Z",{"title":29310,"description":29370},[1997,340,2079,342],"2023-01-23T21:35:21.000Z","H42DpBKdvKSfA7tb0EgJf4bR03-uT0jHUc7Hhv1YMWk",{"id":29387,"avatar":29388,"bio":29389,"extension":31,"github":29390,"linkedin":7,"locale":35,"meta":29391,"name":29393,"role":29398,"slug":7,"stem":29399,"twitter":29400,"website":29401,"__hash__":29402},"authors_en/en/authors/raed-bahri.md","/images/raed-bahri.avif","Product Manager and Developer specializing in Arabic-first applications","lord007tn",{"path":29392,"title":29393,"description":24,"body":29394},"/en/authors/raed-bahri","Raed Bahri",{"type":9,"value":29395,"toc":29396},[],{"title":24,"searchDepth":25,"depth":25,"links":29397},[],"Founder & Product Developer","en/authors/raed-bahri","El_Raed_Bahri","https://raedbahri.com","Z0e-eL6j77RzKuYkRKXQQdjQaKAmnzlYZYONZP3MjEQ",{"id":29404,"title":29405,"description":29406,"extension":31,"image":29407,"locale":35,"meta":29408,"slug":29,"stem":29414,"__hash__":29415},"categories_en/en/categories/startups.md","Startups","Building and scaling startups in the tech industry.","/images/startups.avif",{"path":29409,"body":29410},"/en/categories/startups",{"type":9,"value":29411,"toc":29412},[],{"title":24,"searchDepth":25,"depth":25,"links":29413},[],"en/categories/startups","QfK9548CNk9WHc-3t-hdfXG49chwYjzSOg3JZTlCIRk",{"id":29417,"title":25668,"description":29418,"extension":31,"image":29419,"locale":35,"meta":29420,"slug":2127,"stem":29426,"__hash__":29427},"categories_en/en/categories/product-management.md","Strategies and best practices for product managers.","/images/product-management.avif",{"path":29421,"body":29422},"/en/categories/product-management",{"type":9,"value":29423,"toc":29424},[],{"title":24,"searchDepth":25,"depth":25,"links":29425},[],"en/categories/product-management","VP8AvmWkp95DIdaNKkzgzwI5DLu0mKoOlavuIC9LVLk",{"id":29429,"title":29430,"description":29431,"extension":31,"image":29432,"locale":35,"meta":29433,"slug":73,"stem":29439,"__hash__":29440},"categories_en/en/categories/product-development.md","Product Development","Building and launching products effectively.","/images/product-development.avif",{"path":29434,"body":29435},"/en/categories/product-development",{"type":9,"value":29436,"toc":29437},[],{"title":24,"searchDepth":25,"depth":25,"links":29438},[],"en/categories/product-development","e30uFE6jL7XRSrAzymfpyYgdcr3Kfff_IDEwGh4JJkw",{"id":29442,"title":21239,"description":29443,"extension":31,"image":29444,"locale":35,"meta":29445,"slug":373,"stem":29451,"__hash__":29452},"categories_en/en/categories/development.md","Technical articles and tutorials for developers.","/images/development.avif",{"path":29446,"body":29447},"/en/categories/development",{"type":9,"value":29448,"toc":29449},[],{"title":24,"searchDepth":25,"depth":25,"links":29450},[],"en/categories/development","vv9pVu7ow61Y7Dcz8LWUDC39YazUTK-_sSU8t9k52WA",1761775965992]