<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Oleg Proskurin</title>
    <description>The latest articles on DEV Community by Oleg Proskurin (@usulpro).</description>
    <link>https://dev.to/usulpro</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F502727%2F837148e9-0fc3-49a3-9e19-c4e6ecba079c.jpeg</url>
      <title>DEV Community: Oleg Proskurin</title>
      <link>https://dev.to/usulpro</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/usulpro"/>
    <language>en</language>
    <item>
      <title>7 Awesome Multi-Tenant Features in Headless CMS That'll Make Your Life Easier</title>
      <dc:creator>Oleg Proskurin</dc:creator>
      <pubDate>Sat, 24 Aug 2024 12:15:00 +0000</pubDate>
      <link>https://dev.to/focusreactive/7-awesome-multi-tenant-features-in-headless-cms-thatll-make-your-life-easier-2haa</link>
      <guid>https://dev.to/focusreactive/7-awesome-multi-tenant-features-in-headless-cms-thatll-make-your-life-easier-2haa</guid>
      <description>&lt;p&gt;Headless CMS platforms are not only matching traditional content management systems but are significantly surpassing them. These systems offer advanced multi-tenant features that traditional CMS platforms lack. Ready to enhance your web strategy? Let's delve into seven features that can transform your content management experience.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Multilingual Content Management&lt;/strong&gt; 🌍&lt;br&gt;&lt;br&gt;
Eliminate language barriers effortlessly. Headless CMS platforms enable you to manage content in multiple languages within a single interface, making it seamless to reach a global audience. It's like hosting an international conference within your CMS. Learn more about &lt;a href="https://focusreactive.com/multiple-domains-with-a-headless-cms/#multilanguage" rel="noopener noreferrer"&gt;setting up a multilingual project in Storyblok&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Multi-Domain Support&lt;/strong&gt; 🏢&lt;br&gt;&lt;br&gt;
Managing multiple brands or clients? Headless CMS provides centralized control over several domains from one hub. It's akin to having a Swiss Army knife for websites—multiple tools in one compact package. Discover how to &lt;a href="https://focusreactive.com/multiple-domains-with-a-headless-cms/#the-scenario-managing-multiple-domains" rel="noopener noreferrer"&gt;configure a multi-domain setup with Vercel, NextJS, and Storyblok&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Multi-Regional Content Delivery&lt;/strong&gt; 🗺️&lt;br&gt;&lt;br&gt;
Go beyond translation by tailoring your content for different countries or regions, ensuring your message resonates with local audiences. This feature also helps navigate varying governmental requirements across countries or even states—crucial in industries like iGaming. Explore how we established CMS &lt;a href="https://focusreactive.com/sanity-cms-for-tipico-platform/#1-the-labels-system" rel="noopener noreferrer"&gt;sections for U.S. states in Sanity&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Built-In A/B Testing&lt;/strong&gt; 🧪&lt;br&gt;&lt;br&gt;
Some Headless CMS platforms include integrated A/B testing capabilities. Experiment with different content versions to optimize engagement, providing insights into what your audience prefers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Personalized Content Delivery&lt;/strong&gt; 🎭&lt;br&gt;&lt;br&gt;
Imagine a CMS that delivers content based on user behavior and interests. This feature enhances user experience by providing relevant content. Learn how &lt;a href="https://focusreactive.com/modern-ecommerce-architecture-trends-and-services-a-comprehensive-guide/#24-getting-personal-using-data-to-improve-shopping-experiences" rel="noopener noreferrer"&gt;personalization can be implemented&lt;/a&gt; to improve engagement.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Omnichannel Content Distribution&lt;/strong&gt; 📱&lt;br&gt;&lt;br&gt;
Distribute your content across websites, mobile apps, smart devices, and more, ensuring consistency and broad reach. This is especially beneficial for eCommerce platforms, maintaining product presentation across various channels. Read more about &lt;a href="https://focusreactive.com/modern-ecommerce-architecture-trends-and-services-a-comprehensive-guide/#23-omnichannel-retail-blending-online-and-offline-shopping" rel="noopener noreferrer"&gt;omnichannel retail and blending online and offline shopping&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Customizable User Roles and Permissions&lt;/strong&gt; 🔐&lt;br&gt;&lt;br&gt;
Define who has access to what within your CMS. You can grant limited access to external contributors, perfect for collaborations without compromising security. See how you can &lt;a href="https://focusreactive.com/assigning-cms-users-to-sanity/" rel="noopener noreferrer"&gt;assign CMS users in Sanity&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These multi-tenant features showcase how Headless CMS is redefining content management. It's about creating dynamic experiences across multiple platforms and audiences.&lt;/p&gt;

&lt;p&gt;Development with Headless CMS is often more straightforward than you might think. It excels in performance and SEO optimization—key factors that make your website stand out in today's digital landscape.&lt;/p&gt;

&lt;p&gt;At FocusReactive, we've witnessed businesses transform with these features. Our team specializes in platforms like Storyblok and Sanity and is dedicated to helping you unlock their full potential.&lt;/p&gt;

&lt;p&gt;Interested in learning how to set up a multi-tenant Headless CMS project using Storyblok, NextJS, and Vercel? Refer to our comprehensive &lt;a href="https://focusreactive.com/multiple-domains-with-a-headless-cms/" rel="noopener noreferrer"&gt;technical guide on the FocusReactive blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ready to elevate your web presence with multi-tenant Headless CMS? Let's &lt;a href="https://focusreactive.com/#mail-us" rel="noopener noreferrer"&gt;discuss your project&lt;/a&gt; and how we can help you achieve digital excellence. The future of content management is here—are you ready to embrace it?&lt;/p&gt;

</description>
      <category>ecommerce</category>
      <category>headless</category>
      <category>storyblok</category>
      <category>webdev</category>
    </item>
    <item>
      <title>7 Key eCommerce Trends for 2024 You Need to Know</title>
      <dc:creator>Oleg Proskurin</dc:creator>
      <pubDate>Mon, 12 Aug 2024 08:19:07 +0000</pubDate>
      <link>https://dev.to/focusreactive/7-key-ecommerce-trends-for-2024-you-need-to-know-422j</link>
      <guid>https://dev.to/focusreactive/7-key-ecommerce-trends-for-2024-you-need-to-know-422j</guid>
      <description>&lt;p&gt;Through our research on modern eCommerce, we have identified key trends shaping the industry. For a comprehensive overview, please read our full article on &lt;a href="https://focusreactive.com/modern-ecommerce-architecture-trends-and-services-a-comprehensive-guide/" rel="noopener noreferrer"&gt;Modern eCommerce Architecture Trends and Services&lt;/a&gt;. Below is a concise summary of the primary trends, including their business benefits and additional features.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. AI-Driven Personalization
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5kmkv34ti9y2tn928w4g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5kmkv34ti9y2tn928w4g.png" alt="AI in eCommerce" width="800" height="109"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Learn more about &lt;a href="https://focusreactive.com/modern-ecommerce-architecture-trends-and-services-a-comprehensive-guide/#21-ai-making-online-shopping-smarter" rel="noopener noreferrer"&gt;AI Making Online Shopping Smarter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Artificial Intelligence enhances customer experience through machine learning algorithms, predictive analytics, and customized user interactions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Benefits&lt;/strong&gt;: Increased conversions, enhanced customer experience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Competitive Edge&lt;/strong&gt;: Small apparel shops can use AI to recommend outfits based on customer preferences, leading to higher sales.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Examples&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.dynamicyield.com/" rel="noopener noreferrer"&gt;Dynamic Yield&lt;/a&gt;&lt;/strong&gt; — AI personalization platform that tailors content, products, and offers to each customer's preferences.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://useinsider.com/ai-personalization-tools/" rel="noopener noreferrer"&gt;Insider&lt;/a&gt;&lt;/strong&gt; — AI-powered personalization tool for websites, apps, email, and more.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Integration&lt;/strong&gt;: Medium complexity, requires data infrastructure and expertise.&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  2. AR and VR Shopping Experiences
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2b1ki4ob3dnfky0y5xnp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2b1ki4ob3dnfky0y5xnp.png" alt="AR and VR in eCommerce" width="800" height="109"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Discover how &lt;a href="https://focusreactive.com/modern-ecommerce-architecture-trends-and-services-a-comprehensive-guide/#22-ar-and-vr-bringing-online-shopping-to-life" rel="noopener noreferrer"&gt;AR and VR are Bringing Online Shopping to Life&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;AR and VR technologies bring products to life, allowing customers to virtually try on products or visualize them in their environment.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Benefits&lt;/strong&gt;: Reduced returns, increased customer confidence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Competitive Edge&lt;/strong&gt;: Dress shops can use VR to allow customers to try on dresses virtually before purchasing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Examples&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.zakeke.com/" rel="noopener noreferrer"&gt;Zakeke&lt;/a&gt;&lt;/strong&gt; — 3D product configurator and customizer plugin for eCommerce, allowing customers to craft their dream products.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.threekit.com/" rel="noopener noreferrer"&gt;Threekit&lt;/a&gt;&lt;/strong&gt; — Visual product configurator for brands and manufacturers, enabling 3D configuration, virtual photography, and augmented reality.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Integration&lt;/strong&gt;: High complexity, requires AR/VR development skills.&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  3. Omnichannel Retail Integration
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzfwu1g5pmrx5cpu4uljp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzfwu1g5pmrx5cpu4uljp.png" alt="Omnichannel eCommerce" width="800" height="109"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Explore how &lt;a href="https://focusreactive.com/modern-ecommerce-architecture-trends-and-services-a-comprehensive-guide/#23-omnichannel-retail-blending-online-and-offline-shopping" rel="noopener noreferrer"&gt;Omnichannel Retail is Blending Online and Offline Shopping&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Omnichannel strategies blend online and offline shopping, providing a seamless experience across all platforms.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Benefits&lt;/strong&gt;: Improved customer loyalty, consistent brand experience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Competitive Edge&lt;/strong&gt;: A local bookstore can integrate online and offline shopping for a unified customer experience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Examples&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://help.shopify.com/en/manual/intro-to-shopify/pricing-plans/plans-features/shopify-plus-plan" rel="noopener noreferrer"&gt;Shopify Plus&lt;/a&gt;&lt;/strong&gt; — Offers features like unlimited staff accounts, customizable checkout, and expansion stores to support high-volume businesses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://magicfuse.co/blog/what-is-salesforce-commerce-cloud/" rel="noopener noreferrer"&gt;Salesforce Commerce Cloud&lt;/a&gt;&lt;/strong&gt; — Provides tools, mobile frameworks, and features to create responsive eCommerce websites and deliver personalized customer experiences across channels.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Integration&lt;/strong&gt;: Medium complexity, requires unified data management.&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  4. Data-Driven Personalization
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4cay12258hrcrbugnjjk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4cay12258hrcrbugnjjk.png" alt="Data in eCommerce" width="800" height="109"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Find out more about &lt;a href="https://focusreactive.com/modern-ecommerce-architecture-trends-and-services-a-comprehensive-guide/#24-getting-personal-using-data-to-improve-shopping-experiences" rel="noopener noreferrer"&gt;Using Data to Improve Shopping Experiences&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Utilizing customer data to create personalized shopping experiences enhances engagement and satisfaction.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Benefits&lt;/strong&gt;: Better customer insights, increased sales.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Competitive Edge&lt;/strong&gt;: A coffee shop can tailor its offerings based on customer purchase history and preferences.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Examples&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://segment.com/" rel="noopener noreferrer"&gt;Segment&lt;/a&gt;&lt;/strong&gt; — Customer data platform that collects, unifies, and activates customer data across the stack.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.optimizely.com/" rel="noopener noreferrer"&gt;Optimizely&lt;/a&gt;&lt;/strong&gt; — Digital experience platform that enables A/B testing, feature flagging, and personalization.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Integration&lt;/strong&gt;: Medium complexity, requires robust data analytics capabilities.&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  5. Advanced Delivery Solutions
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq5008qhs9xnf4wgcrfur.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq5008qhs9xnf4wgcrfur.png" alt="Delivery in eCommerce" width="800" height="109"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Learn about &lt;a href="https://focusreactive.com/modern-ecommerce-architecture-trends-and-services-a-comprehensive-guide/#25-getting-your-stuff-faster-the-future-of-delivery" rel="noopener noreferrer"&gt;The Future of Delivery&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Innovations in last-mile delivery, such as autonomous vehicles and drone deliveries, speed up and streamline the delivery process.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Benefits&lt;/strong&gt;: Faster deliveries, reduced costs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Competitive Edge&lt;/strong&gt;: A local grocery store can offer drone deliveries for quicker and more efficient service.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Examples&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.starship.xyz/" rel="noopener noreferrer"&gt;Starship Technologies&lt;/a&gt;&lt;/strong&gt; — Autonomous robot delivery service that makes food and package deliveries more efficient, convenient, and sustainable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://mttr.net/" rel="noopener noreferrer"&gt;Matternet&lt;/a&gt;&lt;/strong&gt; — Drone delivery platform that enables on-demand delivery of medical supplies and other goods.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Integration&lt;/strong&gt;: High complexity, regulatory challenges.&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  6. Mobile Commerce Expansion
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpugsyzonnxgc6mmz15z0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpugsyzonnxgc6mmz15z0.png" alt="Mobile eCommerce" width="800" height="109"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Explore &lt;a href="https://focusreactive.com/modern-ecommerce-architecture-trends-and-services-a-comprehensive-guide/#26-shopping-in-your-pocket-the-mobile-commerce-boom" rel="noopener noreferrer"&gt;The Mobile Commerce Boom&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The rise of mobile commerce is supported by technologies like Progressive Web Apps (PWAs) and mobile payment solutions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Benefits&lt;/strong&gt;: Higher conversion rates, improved user experience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Competitive Edge&lt;/strong&gt;: Small boutiques can leverage mobile commerce to reach customers on the go.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Examples&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://stripe.com/" rel="noopener noreferrer"&gt;Stripe&lt;/a&gt;&lt;/strong&gt; — Online payment processing platform that supports mobile payments, including Apple Pay and Google Pay.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.braintreepayments.com/" rel="noopener noreferrer"&gt;Braintree&lt;/a&gt;&lt;/strong&gt; — PayPal-owned payment gateway that offers mobile SDKs and supports one-touch checkout.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Integration&lt;/strong&gt;: Low complexity, primarily front-end development.&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  7. Subscription-Based Models
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvn0brxrq3kxyjhrookpl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvn0brxrq3kxyjhrookpl.png" alt="Subscription in eCommerce" width="800" height="109"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Learn more about &lt;a href="https://focusreactive.com/modern-ecommerce-architecture-trends-and-services-a-comprehensive-guide/#27-subscription-based-e-commerce-models" rel="noopener noreferrer"&gt;Subscription-Based E-Commerce Models&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Subscription services offer predictable revenue and personalized customer experiences through curated product boxes and digital content.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Benefits&lt;/strong&gt;: Recurring revenue, increased customer retention.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Competitive Edge&lt;/strong&gt;: Beauty product stores can offer subscription boxes with personalized selections.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Examples&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://getrecharge.com/features/" rel="noopener noreferrer"&gt;ReCharge&lt;/a&gt;&lt;/strong&gt; — Subscription management platform that powers recurring orders for over 100 million subscribers globally, offering features like custom checkout domains and discount code analytics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://boldcommerce.com/shopify/subscriptions" rel="noopener noreferrer"&gt;Bold Subscriptions&lt;/a&gt;&lt;/strong&gt; — Shopify app that enables subscription-based business models, with features like recurring payments, subscriber management, and flexible subscription options.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Integration&lt;/strong&gt;: Medium complexity, requires subscription management systems.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;We are thrilled to share our insights and knowledge with you. For more in-depth content, visit our blog on &lt;a href="https://focusreactive.com/blog/category/headless-commerce/" rel="noopener noreferrer"&gt;Headless Commerce&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>storefront</category>
      <category>ecommerce</category>
      <category>webdev</category>
      <category>composable</category>
    </item>
    <item>
      <title>How to Survive If You Still Have a Traditional CMS</title>
      <dc:creator>Oleg Proskurin</dc:creator>
      <pubDate>Mon, 12 Aug 2024 06:16:39 +0000</pubDate>
      <link>https://dev.to/focusreactive/how-to-survive-if-you-still-have-a-traditional-cms-1860</link>
      <guid>https://dev.to/focusreactive/how-to-survive-if-you-still-have-a-traditional-cms-1860</guid>
      <description>&lt;p&gt;Let's face it: if you're still using a traditional CMS like Drupal, you're basically riding a dinosaur in the age of electric cars. Sure, it gets the job done (sort of), but is it really the best you can do for your business? It's time to talk about headless CMS and why you should make the switch before your competitors leave you in the dust.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Traditional CMS Is Becoming Obsolete
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Lack of Flexibility&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Traditional CMS platforms tie your content and presentation together, making it tough to deliver content across different platforms. Want to reuse that fantastic blog post for your app? Good luck!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance Issues&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Monolithic systems can be slow, and in today's fast-paced world, a slow website is a sure way to lose visitors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security Vulnerabilities&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Traditional CMS platforms are frequent targets for hackers. With every new plugin or update, there's a potential new security hole.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scalability Challenges&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
As your business grows, your CMS needs to grow too. Traditional CMS often struggle with scaling efficiently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inconsistent Omnichannel Experience&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Providing a consistent experience across various channels (web, mobile, IoT) is a nightmare with traditional CMS.&lt;/p&gt;

&lt;h3&gt;
  
  
  Competitive Advantages of Switching to Headless CMS
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Flexibility and Freedom&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Headless CMS separates the backend from the frontend, allowing developers to use any technology stack they prefer. This means you can deliver content wherever and however you want.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enhanced Performance&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
APIs deliver content quickly, ensuring your users enjoy a fast and seamless experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Improved Security&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Decoupling the backend from the frontend minimizes security risks. Updates can be made without breaking the frontend.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Better Scalability&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Headless CMS can grow with your business. Adding new content types or channels is a breeze.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Omnichannel Experience&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Easily repurpose and distribute content across multiple platforms, ensuring a unified brand experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Simple and Painless Migration Options
&lt;/h3&gt;

&lt;p&gt;Ready to make the switch? Here are some modern headless CMS options to consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sanity&lt;/strong&gt;: Known for its real-time collaboration and flexible content modeling. &lt;a href="https://focusreactive.com/migration-from-drupal/#sanity" rel="noopener noreferrer"&gt;Sanity&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storyblok&lt;/strong&gt;: Offers a visual editor and a component-based approach for creating reusable content blocks. &lt;a href="https://focusreactive.com/migration-from-drupal/#storyblok" rel="noopener noreferrer"&gt;Storyblok&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contentful&lt;/strong&gt;: Provides a robust API and extensive integration capabilities. &lt;a href="https://focusreactive.com/migration-from-drupal/#contentful" rel="noopener noreferrer"&gt;Contentful&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Directus&lt;/strong&gt;: An open-source option that offers a dynamic API and customizable dashboard. &lt;a href="https://focusreactive.com/migration-from-drupal/#directus" rel="noopener noreferrer"&gt;Directus&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Payload&lt;/strong&gt;: Focuses on developer experience with a fully extendable and customizable backend. &lt;a href="https://focusreactive.com/migration-from-drupal/#payload-cms" rel="noopener noreferrer"&gt;Payload&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, we strongly recommend working with an experienced agency to ensure a smooth and successful migration. These experts can help you navigate the complexities and get your new system up and running without a hitch.&lt;/p&gt;

&lt;p&gt;Headless CMS is transforming the way we manage and deliver content. By adopting this modern approach, businesses can achieve greater flexibility, performance, and security while scaling seamlessly across multiple channels. For a comprehensive guide on migrating from Drupal to a headless CMS, check out the full article &lt;a href="https://focusreactive.com/migration-from-drupal/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>cms</category>
      <category>headless</category>
      <category>migration</category>
      <category>webdev</category>
    </item>
    <item>
      <title>6 Effective Ways to Load Content in Modern Static Sites with Next.js v14 page router</title>
      <dc:creator>Oleg Proskurin</dc:creator>
      <pubDate>Mon, 12 Aug 2024 05:42:14 +0000</pubDate>
      <link>https://dev.to/focusreactive/6-effective-ways-to-load-content-in-modern-static-sites-with-nextjs-v14-page-router-12fm</link>
      <guid>https://dev.to/focusreactive/6-effective-ways-to-load-content-in-modern-static-sites-with-nextjs-v14-page-router-12fm</guid>
      <description>&lt;p&gt;Arthur Nikitsin, a seasoned developer at FocusReactive, has published an insightful article on &lt;a href="https://focusreactive.com/what-is-a-static-website/" rel="noopener noreferrer"&gt;static site generation&lt;/a&gt;. But even static websites can leverage various content-loading methods for enhanced performance and flexibility. In this overview, we'll explore six effective methods available in Next.js v14 using the pages router. These methods ensure optimal performance and user experience, even with SSG. Note that the app router offers more flexibility, but is recommended to wait for the stable release in v15.&lt;/p&gt;

&lt;p&gt;Check out Arthur's original article for a detailed dive into static site generation.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Static Site Generation (SSG)
&lt;/h4&gt;

&lt;p&gt;Generates HTML at build time and reuses it for each request. Ideal for pages with content that doesn’t change often. This is the primary method used in static site generation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// pages/index.js&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getStaticProps&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetchData&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;When to use:&lt;/strong&gt; For static content like blogs or documentation.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;API:&lt;/strong&gt; &lt;code&gt;getStaticProps&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;How it works:&lt;/strong&gt; Fetches data at build time, creating HTML that is served on every request.&lt;br&gt;&lt;br&gt;
&lt;a href="https://nextjs.org/docs/pages/building-your-application/data-fetching/get-static-props" rel="noopener noreferrer"&gt;Read more about SSG&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  2. Server-Side Rendering (SSR)
&lt;/h4&gt;

&lt;p&gt;Generates HTML on each request, useful for dynamic content.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// pages/index.js&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getServerSideProps&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetchData&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;When to use:&lt;/strong&gt; For frequently changing data.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;API:&lt;/strong&gt; &lt;code&gt;getServerSideProps&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;How it works:&lt;/strong&gt; Fetches data on every request, rendering HTML dynamically.&lt;br&gt;&lt;br&gt;
&lt;a href="https://nextjs.org/docs/pages/building-your-application/data-fetching/get-server-side-props" rel="noopener noreferrer"&gt;Read more about SSR&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  3. Client-Side Rendering (CSR)
&lt;/h4&gt;

&lt;p&gt;Data is fetched and rendered on the client side, which can be beneficial even for static sites. This method is useful when you need to update parts of the page based on user interactions without a full page reload.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// pages/index.js&lt;/span&gt;
&lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;fetchData&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;setData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nf"&gt;fetchData&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;When to use:&lt;/strong&gt;  For interactive elements like forms, real-time data, or personalized content that updates after the initial page load. &lt;br&gt;
&lt;strong&gt;API:&lt;/strong&gt; &lt;code&gt;useEffect&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;How it works:&lt;/strong&gt; Fetches data in the browser after the initial load, allowing for dynamic updates without a full reload. This enhances user experience by providing instant feedback or updates based on user interactions.&lt;br&gt;
&lt;a href="https://nextjs.org/docs/pages/building-your-application/data-fetching/client-side" rel="noopener noreferrer"&gt;Read more about CSR&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  4. Code Splitting
&lt;/h4&gt;

&lt;p&gt;Dynamically imports parts of code to optimize load time. Code splitting can also be used for lazy loading components (see the next point).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;dynamic&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;next/dynamic&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;DynamicComponent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;dynamic&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../components/DynamicComponent&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;When to use:&lt;/strong&gt; To improve performance by loading only necessary code.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;API:&lt;/strong&gt; &lt;code&gt;next/dynamic&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;How it works:&lt;/strong&gt; Loads code chunks on demand, reducing initial load time.&lt;br&gt;&lt;br&gt;
&lt;a href="https://nextjs.org/docs/pages/building-your-application/optimizing/lazy-loading" rel="noopener noreferrer"&gt;Read more about Code Splitting&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  5. Lazy Loading Components
&lt;/h4&gt;

&lt;p&gt;Defers loading of offscreen components until needed, enhancing performance.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;dynamic&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;next/dynamic&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;DynamicHeader&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;dynamic&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../components/header&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Loading&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;,
&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Home&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;DynamicHeader&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;When to use:&lt;/strong&gt; For components not immediately in view.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;API:&lt;/strong&gt; &lt;code&gt;React.lazy&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;How it works:&lt;/strong&gt; Loads components when they are about to enter the viewport.&lt;br&gt;&lt;br&gt;
&lt;a href="https://nextjs.org/docs/pages/building-your-application/optimizing/lazy-loading" rel="noopener noreferrer"&gt;Read more about Lazy Loading Components&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  6. Lazy Loading Images
&lt;/h4&gt;

&lt;p&gt;By default, the &lt;code&gt;next/image&lt;/code&gt; component uses lazy loading for images. The &lt;code&gt;priority&lt;/code&gt; prop can be used to disable lazy loading when necessary.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Image&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;next/image&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;MyComponent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Image&lt;/span&gt;
    &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/path/to/image.jpg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="nx"&gt;alt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Description&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nx"&gt;priority&lt;/span&gt; &lt;span class="c1"&gt;// use it to disable lazy loading&lt;/span&gt;
  &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;When to use:&lt;/strong&gt; To optimize page speed with many images.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;API:&lt;/strong&gt; &lt;code&gt;next/image&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;How it works:&lt;/strong&gt; Defers image loading until they are needed, reducing initial load time.&lt;br&gt;&lt;br&gt;
&lt;a href="https://nextjs.org/docs/pages/building-your-application/optimizing/images" rel="noopener noreferrer"&gt;Read more about lazy loading images&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;These methods in Next.js v14 can significantly improve your static site's performance and user experience. For more detailed insights, read Arthur Nikitsin's full article. You can explore more of his work &lt;a href="https://focusreactive.com/blog/author/ArturNikitsin/" rel="noopener noreferrer"&gt;in our company blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>nextjs</category>
      <category>performance</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Top 5 Must-Ask Questions About Your Career in IT</title>
      <dc:creator>Oleg Proskurin</dc:creator>
      <pubDate>Wed, 26 Jun 2024 18:27:06 +0000</pubDate>
      <link>https://dev.to/usulpro/top-5-must-ask-questions-about-your-career-in-it-2245</link>
      <guid>https://dev.to/usulpro/top-5-must-ask-questions-about-your-career-in-it-2245</guid>
      <description>&lt;p&gt;Navigating the labyrinth of an IT career can sometimes feel like decoding the most complex algorithm. But hey, who said challenges aren’t fun? Every question about your career can be a stepping stone to your next big achievement. With IT continually evolving, maintaining a laser focus on career progression, honing in-demand skills, and ensuring job satisfaction requires not just attention but consistency. It’s about asking the right career questions—whether you’re a bright-eyed beginner or a seasoned professional. The landscape of challenges and opportunities is vast, but with the right guidance, every struggle can lead to substantial personal and professional growth.&lt;/p&gt;

&lt;p&gt;In this journey of career exploration, I’m going to share insights on some of the most pressing questions about careers in the realm of Information Technology. From understanding the essential skills for success and navigating job transitions to weighing the pros and cons of freelancing versus corporate gigs, and finding ways to dodge the dreaded burnout. Additionally, for those of you starting fresh, we'll discuss tips to make your mark and ensure a smooth sailing career path. Drawing from my own transformation from a novice developer to a tech lead, consider me your career mentor, here to offer coaching, counseling, and a sprinkle of fun advice. So, if you’re ready to tackle career mentoring head-on and navigate the complexities of job satisfaction and career challenges with ease, let’s dive in! And don’t forget to hit me up with your thoughts, or subscribe to my Twitter &lt;a href="https://twitter.com/UsulPro"&gt;@UsulPro&lt;/a&gt; for more nuggets of wisdom.&lt;/p&gt;

&lt;h2&gt;
  
  
  Question 1: What skills are essential for a successful IT career?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Technical Skills
&lt;/h3&gt;

&lt;p&gt;In the rapidly evolving field of IT, possessing a robust set of technical skills is crucial. You should consider enhancing your expertise in areas like &lt;a href="https://www.coursera.org/articles/key-it-skills-for-your-career"&gt;cloud computing&lt;/a&gt;, programming, systems, and networks. For those aiming to delve into IT security, foundational knowledge gained from roles in help desk support, networking, or system administration is invaluable. Programming remains a staple skill, whether for developing software, web applications, or automating tasks. The importance of being adept in managing computer systems and networks cannot be overstated, as these are central to the functionality of any IT team. Additionally, skills in data analysis are becoming increasingly crucial for roles such as database administrators and data engineers. The emerging fields of DevOps and cloud computing also offer new avenues for IT professionals, with skills in these areas opening doors to roles like cloud developer, cloud administrator, and cloud architect.&lt;/p&gt;

&lt;h3&gt;
  
  
  Soft Skills
&lt;/h3&gt;

&lt;p&gt;While technical prowess is key, &lt;a href="https://www.comptia.org/career-change/exploring-it/skills-for-it"&gt;soft skills are equally essential&lt;/a&gt; to thrive in the IT industry. Communication tops the list, as IT professionals must articulate complex technical issues in understandable terms for diverse audiences. Being organized enhances efficiency, particularly in dynamic IT environments where you may juggle multiple projects. Analytical abilities enable you to diagnose and resolve tech issues effectively. Creativity also plays a significant role; it's not just about solving problems but doing so innovatively. Project management skills are critical, as IT professionals often oversee various projects and must meet deadlines consistently. Furthermore, traits like perseverance, problem-solving, resourcefulness, curiosity, and a genuine interest in helping others are invaluable in fostering a successful IT career.&lt;/p&gt;

&lt;h3&gt;
  
  
  Constant Learning and Adaptation
&lt;/h3&gt;

&lt;p&gt;The tech landscape is characterized by rapid changes and continuous innovation. Staying relevant means committing to lifelong learning and regular skill upgrades. Engaging in &lt;a href="https://www.linkedin.com/pulse/role-continuous-learning-tech-career-advancement-denzel-owusu-ansah-lagdf"&gt;continuous learning activities&lt;/a&gt;, such as online courses, workshops, seminars, and conferences, not only keeps you updated but also opens up opportunities for career advancement. Platforms like Coursera, Udemy, and edX are excellent for pursuing new knowledge and certifications. Additionally, participating in community and open-source projects can provide hands-on experience with real-world challenges, while staying informed through tech blogs, journals, and books is essential for keeping pace with industry trends. Employers play a pivotal role by fostering an environment that encourages learning and application of new skills, benefiting both the organization and its employees.&lt;/p&gt;

&lt;h2&gt;
  
  
  Question 2: How do you navigate career transitions in IT?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpkhvshxsos5jfmo4jt0k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpkhvshxsos5jfmo4jt0k.png" alt="Image description" width="800" height="109"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Developing a Strategy
&lt;/h3&gt;

&lt;p&gt;Navigating career transitions in IT requires a well-thought-out strategy that aligns with your career goals and personal values. Begin by &lt;a href="https://lareinstitute.com/navigating-career-transitions-tips-and-strategies/"&gt;assessing your current skills&lt;/a&gt;, interests, and the values that drive you. Research industries and roles that spark your interest and reach out for informational interviews to gain deeper insights. Transitioning may also necessitate acquiring new skills or certifications; consider enrolling in relevant vocational programs or online courses to bridge any skill gaps. A strategic approach to your job search is crucial; tailor your resume for each application, highlight relevant experiences, and leverage job search engines and professional networks to uncover opportunities that align with your new career objectives.&lt;/p&gt;

&lt;h3&gt;
  
  
  Seeking Mentorship
&lt;/h3&gt;

&lt;p&gt;Mentorship is invaluable during career transitions. A mentor &lt;a href="https://www.coursera.org/articles/how-to-find-a-mentor"&gt;provides guidance&lt;/a&gt;, industry insights, and can help you navigate the complexities of the IT field. They offer support in developing in-demand technical skills, understanding industry trends, and setting realistic career goals. To find a mentor, start within your existing network or utilize platforms like LinkedIn to connect with experienced professionals in your desired field. Regularly update your mentor on your progress and be open to feedback, as this will help you refine your approach and advance your career.&lt;/p&gt;

&lt;h3&gt;
  
  
  Networking
&lt;/h3&gt;

&lt;p&gt;Effective networking is essential for a successful career transition in IT. &lt;a href="https://www.comptia.org/blog/the-role-of-networking-in-building-a-tech-career"&gt;Engage actively on professional networking platforms&lt;/a&gt; such as LinkedIn, join relevant online forums, and participate in tech conferences and career fairs to meet industry professionals. These interactions provide insights into industry trends, help align your skills with market demands, and offer a support system of peers, which is particularly beneficial in today's remote-working era. Remember, networking is not just about making new contacts; it also involves nurturing relationships and sharing your career aspirations with those around you, including friends and family who might offer unexpected connections and opportunities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Question 3: What are the pros and cons of freelancing vs. corporate jobs in IT?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flkjbrwpprsp7v5kdgl59.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flkjbrwpprsp7v5kdgl59.png" alt="Image description" width="800" height="109"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Freelancing Pros and Cons
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Pros:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Flexibility and Autonomy&lt;/strong&gt;: As a freelancer, you can set your own schedule, choose the projects you work on, and make decisions independently. This flexibility appeals especially to caregivers, digital nomads, and those who prefer a non-traditional work environment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Variety and Potential for Higher Earnings&lt;/strong&gt;: Freelancers can work on diverse projects with different clients, which helps in building a varied portfolio. Additionally, with the right skills and market demand, freelancers have the &lt;a href="https://www.quora.com/Which-is-better-freelancer-or-work-with-a-company"&gt;potential to earn more&lt;/a&gt; than they would in a corporate job.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.upwork.com/resources/freelance-vs-employee-pros-and-cons"&gt;&lt;strong&gt;Remote Work Opportunities&lt;/strong&gt;&lt;/a&gt;: Being self-employed, freelancers can work from anywhere, embracing the full benefits of remote work. This is particularly advantageous in today’s digital age where remote work is increasingly popular.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Cons:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Income Instability and &lt;a href="https://www.quora.com/Which-is-better-freelancer-or-work-with-a-company"&gt;Lack of Benefits&lt;/a&gt;&lt;/strong&gt;: Freelancers face fluctuations in income and do not receive benefits like health insurance or retirement plans provided by employers. Managing taxes also becomes a personal responsibility, adding to the complexities of freelance work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Isolation and Work Security&lt;/strong&gt;: Working alone can lead to feelings of isolation. Additionally, the lack of job security and potential payment issues from clients can create financial instability and stress.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Corporate Job Pros and Cons
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Pros:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Stability and Benefits&lt;/strong&gt;: Corporate jobs generally offer a steady income and benefits such as health insurance, paid time off, and retirement plans. These aspects provide a sense of security and ease in personal financial planning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Career Progression and Structured Growth&lt;/strong&gt;: Companies often provide clear pathways for career advancement and skill development, which can be more predictable than the freelance route. Working in a team environment also supports professional growth through collaboration.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Cons:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Less Flexibility and Autonomy&lt;/strong&gt;: Corporate employees often have less control over their schedules and the projects they work on. They need to adhere to company policies and may have limited decision-making power.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Routine Work and Defined Hours&lt;/strong&gt;: Depending on the role, corporate jobs can involve repetitive tasks and typically require adherence to a standard 9-to-5 schedule, which may not align with everyone’s productivity peaks.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Making an Informed Decision
&lt;/h3&gt;

&lt;p&gt;When deciding between freelancing and a corporate job, consider your personal goals, lifestyle preferences, and work values. Some thrive on the independence and variety that freelancing offers, while others find greater satisfaction in the stability and structured progression of corporate roles. It’s essential to evaluate both sides carefully and choose the path that aligns best with your professional aspirations and personal circumstances.&lt;/p&gt;

&lt;h2&gt;
  
  
  Question 4: How can you avoid burnout in your IT career?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F28hebr5ziy9vdpgbeluf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F28hebr5ziy9vdpgbeluf.png" alt="Image description" width="800" height="109"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Identifying Signs of Burnout
&lt;/h3&gt;

&lt;p&gt;Recognizing the signs of burnout is your first step in combating it. Burnout manifests through emotional, physical, and behavioral symptoms. You might feel tired and drained almost all the time, experience changes in sleep or eating habits, or suffer from &lt;a href="https://thrivingcenterofpsych.com/blog/when-is-it-time-to-change-jobs-8-signs-to-look-for-something-new/"&gt;regular headaches and frequent illnesses&lt;/a&gt;. Emotional signs include a feeling of failure, self-doubt, and using unhealthy methods to cope, such as consuming excessive food, alcohol, or drugs. If you find yourself isolating from others and feeling constantly overwhelmed, these could be strong indicators that you're facing burnout. Additionally, if your job starts seeping into your personal life &lt;a href="https://www.pdq.com/blog/signs-its-time-to-leave-your-job-in-it/"&gt;excessively, leading to irritability and high stress&lt;/a&gt;, it might be time to assess the impact of your work environment on your mental health.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strategies for Work-Life Balance
&lt;/h3&gt;

&lt;p&gt;To prevent burnout, establishing a healthy work-life balance is crucial. Start by setting clear boundaries between work and personal time. This might include &lt;a href="https://hbr.org/2018/01/when-burnout-is-a-sign-you-should-leave-your-job"&gt;setting specific work hours and sticking to them&lt;/a&gt;, and not allowing work commitments to intrude into your personal life. Encourage your workplace to support work-life balance by respecting working hours and not expecting communication outside of these times. Managers can play a significant role by setting an example, ensuring they are not sending emails or setting tasks outside of work hours. Additionally, engaging in activities outside of work that you enjoy can significantly buffer the effects of job stress and help maintain your mental and emotional well-being.&lt;/p&gt;

&lt;h3&gt;
  
  
  When to Consider a Job Change
&lt;/h3&gt;

&lt;p&gt;Sometimes, despite best efforts to manage work stressors, a job change may be necessary to escape burnout. Reflect on whether your job allows you to work to your full potential and whether it aligns with your values and interests. If you find yourself constantly facing unrealistic workloads, lack of control over your work, or a toxic work environment, these are valid reasons to consider looking for new opportunities where you can thrive. Before making a switch, evaluate what you appreciate about your current role and seek these qualities in a new position, ensuring a better fit and hopefully, greater job satisfaction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Question 5: What tips can help beginners succeed in their IT roles?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Effective Learning Methods
&lt;/h3&gt;

&lt;p&gt;For those just starting in IT, mastering effective learning methods can significantly enhance your ability to grasp complex concepts and skills. Initiatives like the &lt;a href="https://www.indeed.com/career-advice/finding-a-job/how-to-start-a-career-in-it"&gt;Google IT Support program&lt;/a&gt; offer foundational knowledge that's crucial for building your IT career. Additionally, &lt;a href="https://www.indeed.com/career-advice/finding-a-job/how-to-start-a-career-in-it"&gt;IBM's IT Support Professional Certificate&lt;/a&gt; program provides hands-on experience with IT fundamentals such as network architecture and cybersecurity in just three months. For more engaged learning, techniques like the SQ3R method and the Feynman Technique help in retaining and understanding information more efficiently. These methods encourage you to summarize what you've learned in your own words, which solidifies your understanding.&lt;/p&gt;

&lt;h3&gt;
  
  
  Seeking Opportunities
&lt;/h3&gt;

&lt;p&gt;To excel in the IT field, actively seeking opportunities to apply your skills is key. Start by using your personal connections; sometimes, who you know is as important as what you know. Enhance your visibility to potential employers by maintaining an updated and comprehensive LinkedIn profile, which acts like your digital resume. Participate in virtual networking events such as hackathons or engage with communities on GitHub to connect with other professionals and showcase your skills. For hands-on experience, consider contributing to open-source projects which can provide real-world experience and improve your technical skills.&lt;/p&gt;

&lt;h3&gt;
  
  
  Staying Motivated Despite Challenges
&lt;/h3&gt;

&lt;p&gt;Staying motivated can be challenging, especially when faced with the rigorous demands of an IT career. Setting clear, achievable goals can significantly boost your motivation and performance. For instance, setting a daily goal of coding for an hour or completing a small project part each week can create a consistent habit that leads to progress. Additionally, finding intrinsic motivation by focusing on aspects of your work that you enjoy can make even mundane tasks more engaging. If motivation dips, remember the importance of short-term goals and the satisfaction of crossing off small tasks that lead towards your larger career objectives.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dly.to/zH1Eak9ysmo"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi9rdt2do94vkkhzfnzo0.png" alt="Image description" width="800" height="109"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Throughout this exploration of the IT landscape, we've delved into the essential components that underpin a fruitful career in this dynamic field. From the foundational technical and soft skills necessary for success, strategies for navigating career transitions, to insightful comparisons between freelancing and corporate positions, and methods for avoiding burnout and thriving as a beginner, the discourse aimed to serve as a mentor’s guide. These insights emphasize the importance of continuous learning, adaptability, and maintaining a work-life balance, reinforcing the thesis that a career in IT is both a journey of constant learning and personal growth.&lt;/p&gt;

&lt;p&gt;Moreover, as we navigate this endless sea of technological advancements, understanding and leveraging the latest tools, such as headless CMS, becomes pivotal for staying ahead. For those intrigued by the potential of such innovative web technologies, joining our Headless &amp;amp; Composable squad on &lt;a href="https://dly.to/zH1Eak9ysmo"&gt;daily.dev&lt;/a&gt; offers a unique opportunity to explore key webdev technologies alongside like-minded professionals. In closing, the journey through the IT career landscape is one of perpetual growth and exploration, where curiosity meets opportunity, and where today’s learners become tomorrow’s leaders.&lt;/p&gt;

</description>
      <category>career</category>
      <category>careerdevelopment</category>
      <category>mentorship</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Why Contribute to Open Source: Pros and Cons for Beginners</title>
      <dc:creator>Oleg Proskurin</dc:creator>
      <pubDate>Mon, 17 Jun 2024 17:38:19 +0000</pubDate>
      <link>https://dev.to/usulpro/why-contribute-to-open-source-pros-and-cons-for-beginners-5cgm</link>
      <guid>https://dev.to/usulpro/why-contribute-to-open-source-pros-and-cons-for-beginners-5cgm</guid>
      <description>&lt;p&gt;Diving into the world of open-source can feel like embarking on an epic journey 🚀. Whether you're looking to sharpen your programming skills, build your resume, or simply contribute to something meaningful, the realm of opensourcing offers a treasure trove of opportunities. But, why contribute to open source? The answer isn't just about padding your CV; it's about joining a global community that thrives on collaboration, innovation, and learning. For beginners, this might sound daunting, but I assure you, the rewards far outweigh the challenges. Through my own voyage from a curious novice to a tech lead, I've experienced firsthand the profound impact that contributing to open-source projects can have on one's career and personal growth.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbugks1udfh4w4apde60b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbugks1udfh4w4apde60b.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this article, we'll explore the myriad advantages of open source, from mentorship programs that guide you through the complexity of code review to the sheer joy of seeing your work being used by others. We'll also navigate through the challenges beginners might face and provide you with actionable recommendations for getting started. By the end, you'll understand why open source is good for developing your coding skills, how to contribute to an open source project effectively, and anticipate the open source pros and cons. So, buckle up! Whether you're looking to contribute to open source for personal fulfillment or to make your mark in the tech community, you're on the right track.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advantages of Open Source for Beginners
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Opportunity for Learning and Growth&lt;/strong&gt;&lt;br&gt;
Engaging in open source projects exposes you to a plethora of technologies and coding practices, offering a robust platform for sharpening your skills. The hands-on experience you gain can be invaluable for your growth as a developer, allowing you to explore new technologies and enhance your problem-solving capabilities 😊.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Building a Professional Network&lt;/strong&gt;&lt;br&gt;
By contributing to open source, you connect with like-minded developers and experts, potentially opening doors to career opportunities and mentorship. This network can be a significant advantage, helping you navigate the tech industry and find guidance from experienced professionals 🌐.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Access to a Variety of Tools and Resources&lt;/strong&gt;&lt;br&gt;
Open source communities provide access to a wide array of tools and resources, helping you tackle projects efficiently. These tools are often developed and maintained by the community, ensuring they are reliable and up-to-date. Engaging with these tools not only enhances your technical skills but also helps in understanding the nuances of software development 🛠️.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contribution to the Community&lt;/strong&gt;&lt;br&gt;
Contributing to open source allows you to give back to the community that fosters the software you use. This not only improves the software but also enriches your sense of accomplishment and connection with a global community. Your contributions help drive the evolution of projects that benefit millions worldwide 🌍.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4jig2okdrmi31v2k82lf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4jig2okdrmi31v2k82lf.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges with Open Source for Beginners
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Understanding Licensing and Legal Issues
&lt;/h3&gt;

&lt;p&gt;Navigating the legal landscape of open source can be daunting for beginners. Understanding the &lt;a href="https://semaphoreci.com/blog/open-source-licensing" rel="noopener noreferrer"&gt;specific licenses, such as MIT or GPL&lt;/a&gt;, is crucial as they dictate how contributions can be used and distributed. Misunderstanding these licenses can lead to legal challenges, especially if proprietary modifications are made without adhering to open source requirements.&lt;/p&gt;

&lt;h3&gt;
  
  
  Navigating Documentation and Support
&lt;/h3&gt;

&lt;p&gt;For newcomers, the vast amount of documentation and the &lt;a href="https://www.digitalocean.com/resources/article/how-to-contribute-to-open-source" rel="noopener noreferrer"&gt;lack of straightforward guides&lt;/a&gt; can be overwhelming. Projects vary greatly, and each comes with its own set of rules and documentation, making it difficult to find where contributions are most needed or how to start.&lt;/p&gt;

&lt;h3&gt;
  
  
  Handling Project Management Challenges
&lt;/h3&gt;

&lt;p&gt;Project management in open source can often be chaotic, especially in projects &lt;a href="https://opensource.stackexchange.com/questions/2069/how-to-deal-with-project-managers-in-an-open-source-project" rel="noopener noreferrer"&gt;lacking strong leadership or clear goals&lt;/a&gt;. Contributors might find themselves in projects where the roadmap is unclear or where the repository owner is less involved in the coding process, leading to stagnation and frustration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Balancing Open Source Work with Other Responsibilities
&lt;/h3&gt;

&lt;p&gt;Contributing to open source projects requires time management skills as it needs to be balanced with personal and professional responsibilities. The challenge of managing time effectively can deter many potential contributors, especially those new to the field who are still finding their footing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recommendations for Getting Started
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Choosing the Right Projects
&lt;/h3&gt;

&lt;p&gt;To kickstart your open-source journey, identify projects that spark your interest and match your skill level. Look for projects with clear documentation, active communities, and &lt;a href="https://medium.com/@niceperson2110/starting-your-open-source-journey-7-best-projects-for-absolute-beginners-11fe01f88e1d" rel="noopener noreferrer"&gt;beginner-friendly tags like "Good First Issue"&lt;/a&gt;. This ensures a smoother entry and ongoing support as you contribute.&lt;/p&gt;

&lt;h3&gt;
  
  
  Contributing to Discussions
&lt;/h3&gt;

&lt;p&gt;Engage actively in project discussions. This can be through forums, IRC, or project meetings. Start by observing and gradually contribute to the discussions. Your involvement will help you understand project dynamics and connect with other contributors.&lt;/p&gt;

&lt;h3&gt;
  
  
  Seeking Mentorship and Guidance
&lt;/h3&gt;

&lt;p&gt;Don't hesitate to seek out mentorship. Join open source communities and participate in events to connect with potential mentors. &lt;a href="https://www.womentech.net/en-us/how-to/how-find-mentorship-opportunities-in-open-source-software-development" rel="noopener noreferrer"&gt;Programs like Google Summer of Code and Outreachy&lt;/a&gt; can also provide structured mentorship opportunities.&lt;/p&gt;

&lt;h3&gt;
  
  
  Setting Realistic Goals
&lt;/h3&gt;

&lt;p&gt;Set clear, achievable goals for what you want to accomplish in open source. Break these goals into smaller milestones to keep track of your progress. This approach helps maintain motivation and ensures a rewarding journey.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhe68vcecme73vr1t7tcp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhe68vcecme73vr1t7tcp.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Embarking on the journey of contributing to open source is not merely about enhancing your resume; it's about actively participating in a culture of collaboration, innovation, and mutual growth 🚀. The rewards, as explored, range from profound personal and professional development to becoming part of a vibrant, supportive community. Each challenge associated with open source contributions delivers valuable lessons, ensuring that every participant, especially beginners, emerges more skilled and connected than they were before. By facing and overcoming these hurdles, contributors not only advance their own capabilities but also significantly impact the broader tech ecosystem 🌐.&lt;/p&gt;

&lt;p&gt;The path to becoming an involved open source contributor is filled with opportunities for learning, networking, and personal fulfillment. Choosing the right projects, engaging in meaningful discussions, seeking out mentorship, and setting clear goals are pivotal steps that guide this rewarding journey. Recognizing the pivotal role of open-source projects in the advancement of modern web technologies, it's worth noting that Headless CMSs, pivotal in the development of many websites, are often open source. For those intrigued by the intersection of creativity and technology, joining our friendly community at Headless &amp;amp; Composable &lt;a href="https://dly.to/zH1Eak9ysmo" rel="noopener noreferrer"&gt;here&lt;/a&gt; can be your gateway to mastering these key technologies. As you embark on this path, remember that your contributions are not just about code; they're about fostering an ecosystem where innovation, learning, and collaboration flourish.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dly.to/zH1Eak9ysmo" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpkvm73551jlejvcwl70e.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQs
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Is it advisable for a beginner to contribute to open source projects?&lt;/strong&gt;&lt;br&gt;
Absolutely! Contributing to open source projects is an excellent way for beginners to enhance their coding skills, connect with like-minded individuals, and gain satisfaction from their contributions. Open source communities are generally welcoming to newcomers, so don't hesitate to participate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. What are the benefits of contributing to open source projects?&lt;/strong&gt;&lt;br&gt;
Contributing to open source provides numerous benefits including the opportunity to network with peers, showcase your abilities to future employers, and boost your self-confidence. Additionally, it aids in the development of leadership and management skills, enhances your coding expertise, and exposes you to new programming styles and regulations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. What are the advantages and disadvantages of open source software?&lt;/strong&gt;&lt;br&gt;
The primary advantages of open source software include its typically free cost and high customizability, which allows users to tailor the software to their specific needs. However, it can sometimes be costly in scenarios where extensive customization is required. Open source software is usually more secure due to the collaborative nature of its development, which allows numerous developers to review and refine the code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. What are the pros and cons of using an open source database?&lt;/strong&gt;&lt;br&gt;
Using an open source database offers several advantages such as cost-effectiveness and flexibility in customization. However, users might face challenges such as a potentially steep learning curve and limited access to customer support compared to proprietary databases.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>beginners</category>
      <category>career</category>
    </item>
    <item>
      <title>Top Headless CMS 2024</title>
      <dc:creator>Oleg Proskurin</dc:creator>
      <pubDate>Wed, 22 May 2024 15:28:24 +0000</pubDate>
      <link>https://dev.to/usulpro/top-headless-cms-2024-4k4l</link>
      <guid>https://dev.to/usulpro/top-headless-cms-2024-4k4l</guid>
      <description>&lt;p&gt;Thrilled to announce a series of reviews on the hottest Headless CMS platforms exclusively on the &lt;a href="https://focusreactive.com/blog" rel="noopener noreferrer"&gt;FR Blog&lt;/a&gt;! 🎉&lt;/p&gt;

&lt;p&gt;Whether you're a developer, designer, or content creator, the in-depth overviews will help you choose the best Headless CMS for your React/NextJS projects. 🛠️✨&lt;/p&gt;

&lt;p&gt;Here's the lineup of the top CMS platforms reviewed:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Sanity&lt;/strong&gt; &lt;a href="https://focusreactive.com/sanity-cms-overview/" rel="noopener noreferrer"&gt;Sanity Review&lt;/a&gt; 🌟&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storyblok&lt;/strong&gt; &lt;a href="https://focusreactive.com/storyblok-cms-overview/" rel="noopener noreferrer"&gt;Storyblok Review&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contentful&lt;/strong&gt; &lt;a href="https://focusreactive.com/contentful-cms-overview/" rel="noopener noreferrer"&gt;Contentful Review&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strapi&lt;/strong&gt; &lt;a href="https://focusreactive.com/strapi-cms-overview/" rel="noopener noreferrer"&gt;Strapi Review&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ghost CMS&lt;/strong&gt; &lt;a href="https://focusreactive.com/ghost-cms-overview/" rel="noopener noreferrer"&gt;Ghost CMS Review&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prismic&lt;/strong&gt; &lt;a href="https://focusreactive.com/prismic-cms-overview/" rel="noopener noreferrer"&gt;Prismic Review&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Directus&lt;/strong&gt; &lt;a href="https://focusreactive.com/directus-cms-overview/" rel="noopener noreferrer"&gt;Directus Review&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hygraph&lt;/strong&gt; &lt;a href="https://focusreactive.com/hygraph-cms-overview/" rel="noopener noreferrer"&gt;Hygraph Review&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kentico Kontent&lt;/strong&gt; &lt;a href="https://focusreactive.com/kentiko-kontent-overview/" rel="noopener noreferrer"&gt;Kentico Kontent Review&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Payload CMS&lt;/strong&gt; &lt;a href="https://focusreactive.com/payload-cms-overview/" rel="noopener noreferrer"&gt;Payload CMS Review&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Dive into these reviews and share your thoughts! 💬 Engage with a professional community that geeks out over the latest in headless CMS technology. 💻🧩&lt;/p&gt;




&lt;p&gt;In my free time, I've been building a community dedicated to the Headless approach in web development. It's a squad on daily.dev where we post and discuss articles about Headless CMS and Composable eCommerce. If you're interested and want to dive into the world of modern technologies, I'd love for you to join the squad &lt;a href="https://dly.to/zH1Eak9ysmo" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dly.to/zH1Eak9ysmo" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgq9yqbql9az7v1f5ng2m.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So what are you waiting for? Head over and become part of an amazing community of like-minded professionals. Let's shape the future of web development together! 💪👩‍💻👨‍💻&lt;/p&gt;




&lt;p&gt;Additionally, here are some bonus CMS suggestions from the blog's amazing readers. Their active participation and broad perspectives are invaluable, and these recommendations might interest you too:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maciekpalmowski.dev/blog/is-it-worth-converting-your-wordpress-to-headless/" rel="noopener noreferrer"&gt;WordPress Headless&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://prepr.io/" rel="noopener noreferrer"&gt;Prepr&lt;/a&gt; with A/B testing and awesome personalization features&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://hashnode.com/" rel="noopener noreferrer"&gt;Hashnode&lt;/a&gt; - A blogging platform that offers a headless option.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.neurotic.cloud/" rel="noopener noreferrer"&gt;Neurotic.cloud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://decapcms.org/" rel="noopener noreferrer"&gt;DecapCMS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://keystonejs.com/" rel="noopener noreferrer"&gt;KeystoneJS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://firecms.co/" rel="noopener noreferrer"&gt;FireCMS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://getkirby.com/" rel="noopener noreferrer"&gt;Kirby CMS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Huge thanks to the amazing readers for their insightful suggestions! Feel free to share your experiences with these CMS in the comments, and let me know if you'd like to see a review of any CMS from the bonus list. Your input shapes the content and keeps the community thriving!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>cms</category>
      <category>contentwriting</category>
      <category>react</category>
    </item>
    <item>
      <title>OpenAI Unveils Sora: The Future of Text-to-Video Generation</title>
      <dc:creator>Oleg Proskurin</dc:creator>
      <pubDate>Fri, 16 Feb 2024 05:09:26 +0000</pubDate>
      <link>https://dev.to/usulpro/openai-unveils-sora-the-future-of-text-to-video-generation-2om7</link>
      <guid>https://dev.to/usulpro/openai-unveils-sora-the-future-of-text-to-video-generation-2om7</guid>
      <description>&lt;p&gt;OpenAI, a prominent player in the AI landscape, has recently unveiled Sora, an advanced text-to-video AI generator that is revolutionizing the field of video generation. Sora distinguishes itself in the AI domain with its exceptional AI video capabilities, serving as a clear indication of the potential future of AI-powered video generation. This comprehensive guide will explore the various aspects of Sora, its capabilities, and what makes it a standout in the rapidly progressing world of artificial intelligence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sora: An Overview
&lt;/h2&gt;

&lt;p&gt;Developed by OpenAI, Sora is an AI model that excels in creating highly realistic and imaginative scenes from text instructions. Sora's unique selling point is its ability to maintain high video quality and accurately respond to user prompts for durations of up to a minute, marking a notable improvement over traditional AI models that often falter with extended samples.&lt;/p&gt;

&lt;p&gt;Sora, OpenAI's innovative creation, leverages a cutting-edge engine that understands physics to an extent, contributing significantly to the video generation process and the photorealism of the videos it produces. A standout feature of Sora is the absence of a mutation effect, ensuring that objects retain their integrity throughout a Sora-generated video, thus enhancing the consistency and realism of the scenes.&lt;/p&gt;

&lt;p&gt;Despite its impressive AI technology capabilities, Sora by OpenAI is not yet accessible to the general public. OpenAI is diligently refining the model and is currently allowing access to select visual artists, designers, and filmmakers for their valuable feedback and further enhancements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Transforming Visual Data into Patches
&lt;/h2&gt;

&lt;p&gt;Sora, OpenAI's pioneering project, employs a novel approach to processing visual data, which is scalable and efficient for training generative models on a wide array of videos and images. Drawing parallels with large language models (LLMs) that train on vast amounts of internet data, Sora uses visual patches akin to text tokens in LLMs. These patches are compact data units that seamlessly integrate various forms of visual content, showcasing the model's machine learning prowess.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Art of Video Compression
&lt;/h2&gt;

&lt;p&gt;To streamline the complexity of visual data, OpenAI trains a neural network that takes raw video as input and outputs a compressed latent representation, both temporally and spatially. This compressed latent space is the training ground for Sora, which then generates videos, and is paired with a decoder model that translates the generated latents back into pixel space, demonstrating OpenAI's expertise in deep learning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Spacetime Latent Patches: The Building Blocks of Sora
&lt;/h2&gt;

&lt;p&gt;Sora, a brainchild of OpenAI, extracts a sequence of spacetime patches from a compressed input video, which act as transformer tokens. This method is equally effective for images, as images are essentially single-frame videos. The patch-based representation allows Sora to train on videos and images with varying resolutions, durations, and aspect ratios. During inference, the size of the generated videos can be adjusted by organizing randomly-initialized patches into a grid of the desired size, showcasing OpenAI's advancements in computer vision and image generation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scaling Transformers for Video Generation
&lt;/h2&gt;

&lt;p&gt;OpenAI utilizes diffusion models, specifically a diffusion transformer, for its text-to-video AI, Sora, which predicts the original 'clean' patches from the input noisy patches. These diffusion transformers have shown impressive scaling properties across various domains, including language modeling, computer vision, and image generation. The notable enhancement in sample quality with increased training compute further confirms the potential of diffusion models in the realm of video generation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advantages of Variable Durations, Resolutions, and Aspect Ratios
&lt;/h2&gt;

&lt;p&gt;Sora, OpenAI's innovative approach to video generation, is trained on data at its native size, bypassing traditional methods that resize, crop, or trim videos. This allows Sora to sample a diverse range of video dimensions, from widescreen 1920x1080p to vertical 1080x1920 videos, catering to different devices and their native aspect ratios. The result is an empirical improvement in composition and framing, showcasing the flexibility of OpenAI's text-to-video technology.&lt;/p&gt;

&lt;h2&gt;
  
  
  Language Understanding with Re-captioning Technique
&lt;/h2&gt;

&lt;p&gt;For effective text-to-video generation, OpenAI's AI content system requires a vast collection of videos with corresponding text captions. The re-captioning technique is applied, where a descriptive captioner model is first trained and then used to generate text captions for all videos in the training set, enhancing text fidelity and the overall video quality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prompting with Images and Videos
&lt;/h2&gt;

&lt;p&gt;OpenAI's Sora can be prompted not only with text but also with other inputs such as pre-existing images or video, broadening its utility in image editing and video prompt tasks. This versatility allows Sora to create perfectly looping video, animate static images, and extend videos in time, among other editing capabilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Emergence of Simulation Capabilities
&lt;/h2&gt;

&lt;p&gt;When trained at scale, Sora, OpenAI's AI technology for video generation, exhibits several emergent capabilities. It can generate videos with dynamic camera motion, maintain the presence of people, animals, and objects even when occluded or leaving the frame, and simulate actions that affect the state of the world in simple ways. These capabilities indicate that scaling up video models is a promising avenue for developing simulators of the physical and digital world.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations of Sora
&lt;/h2&gt;

&lt;p&gt;Despite its impressive capabilities, Sora, OpenAI's text-to-video model, has its limitations, including not accurately modeling the physics of basic interactions and struggling with continuity in long video samples. However, OpenAI is actively addressing these weaknesses to further refine Sora's capabilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;The debut of Sora marks a significant advancement in AI-powered text-to-video and video generation. While there are some limitations, the overall capabilities and potential of OpenAI's Sora are clear. With ongoing refinements, the prospects for text-to-video AI generation are increasingly promising.&lt;/p&gt;

&lt;p&gt;Read tech documentation: &lt;a href="https://openai.com/research/video-generation-models-as-world-simulators"&gt;https://openai.com/research/video-generation-models-as-world-simulators&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>video</category>
      <category>openai</category>
      <category>sora</category>
    </item>
    <item>
      <title>Sanity Visual Editing &amp; Live Preview Demo Project</title>
      <dc:creator>Oleg Proskurin</dc:creator>
      <pubDate>Fri, 08 Dec 2023 12:45:00 +0000</pubDate>
      <link>https://dev.to/usulpro/sanity-visual-editing-live-preview-demo-project-37e8</link>
      <guid>https://dev.to/usulpro/sanity-visual-editing-live-preview-demo-project-37e8</guid>
      <description>&lt;p&gt; We've developed a &lt;strong&gt;&lt;a href="https://github.com/focusreactive/Demo-VisualEditing-Sanity" rel="noopener noreferrer"&gt;demo project&lt;/a&gt;&lt;/strong&gt; 🚀 to test &lt;strong&gt;Sanity's Visual Editing and Live Preview features with NextJS&lt;/strong&gt;. In our &lt;a href="https://dev.to/focusreactive/a-deep-dive-into-sanitys-visual-editing-and-presentation-tool-the-developer-view-513j"&gt;article&lt;/a&gt; 📝, we share insights from this experience, aiming to engage both &lt;strong&gt;developers and content creators&lt;/strong&gt; 👩‍💻👨‍💻.&lt;/p&gt;

&lt;p&gt;Key highlights include &lt;strong&gt;streamlined content management&lt;/strong&gt; 📊, &lt;strong&gt;real-time updates&lt;/strong&gt; ⏱️, and &lt;strong&gt;enhanced workflow efficiency&lt;/strong&gt; 💡. Experience these benefits firsthand through our &lt;strong&gt;live demo&lt;/strong&gt; &lt;a href="https://demo-visual-editing-sanity.vercel.app/" rel="noopener noreferrer"&gt;here&lt;/a&gt; 🌐 and by exploring the deployed &lt;strong&gt;Sanity Studio&lt;/strong&gt; &lt;a href="https://demo-visual-editing-sanity.vercel.app/admin/" rel="noopener noreferrer"&gt;here&lt;/a&gt; 🎨.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Start for Content Creators
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Visit the live project &lt;a href="https://demo-visual-editing-sanity.vercel.app/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Interact with the overlays to understand the visual editing features.&lt;/li&gt;
&lt;li&gt;Click an overlay to be automatically redirected to the corresponding document in &lt;a href="https://demo-visual-editing-sanity.vercel.app/admin/" rel="noopener noreferrer"&gt;Sanity Studio&lt;/a&gt; with the editing field opened for immediate editing.&lt;/li&gt;
&lt;li&gt;Observe the changes in real-time with the live preview.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Article Summary
&lt;/h2&gt;

&lt;p&gt;Our article, "A Deep Dive into Sanity's Visual Editing and Presentation Tool: The Developer View," offers insights into the benefits and technical aspects of using Sanity Studio for visual editing and live preview in web development. It emphasizes the synergy between Sanity's content architecture and the dynamic capabilities of NextJS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ffocusreactive%2FDemo-VisualEditing-Sanity%2Fassets%2F14885189%2Febe2107a-3c35-4863-b3db-063ec5ea7fbb" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ffocusreactive%2FDemo-VisualEditing-Sanity%2Fassets%2F14885189%2Febe2107a-3c35-4863-b3db-063ec5ea7fbb" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Description
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Technology Highlights
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sanity Studio&lt;/strong&gt;: The central content management system, enabling dynamic content updates and management with rich visual editing features.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NextJS&lt;/strong&gt;: Powers the frontend, facilitating the Live Preview feature by integrating seamlessly with Sanity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vercel&lt;/strong&gt;: Used for hosting, enhancing the visual editing experience with efficient deployment and scalability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sanity Overlays &amp;amp; Content Sourcemap&lt;/strong&gt;: Innovative features that add context and interactivity to the visual editing process.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Live Preview and Visual Editing
&lt;/h3&gt;

&lt;p&gt;The project showcases how Sanity's live preview and visual editing capabilities can enhance the content creation and development process. With real-time updates and an intuitive interface, content creators and developers can collaborate more effectively.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ffocusreactive%2FDemo-VisualEditing-Sanity%2Fassets%2F14885189%2F84591df6-9c13-41f5-a0bc-d494f64e847e" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Ffocusreactive%2FDemo-VisualEditing-Sanity%2Fassets%2F14885189%2F84591df6-9c13-41f5-a0bc-d494f64e847e" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Local Development Instructions
&lt;/h2&gt;

&lt;p&gt;To run the development server, follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clone this repository.&lt;/li&gt;
&lt;li&gt;Install dependencies by running &lt;code&gt;npm install&lt;/code&gt; or &lt;code&gt;yarn install&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Start the development server with &lt;code&gt;npm run dev&lt;/code&gt; or &lt;code&gt;yarn dev&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Open &lt;a href="http://localhost:3000/" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt; in your browser to see the result.&lt;/li&gt;
&lt;li&gt;Access the Sanity Studio locally at &lt;a href="http://localhost:3000/admin" rel="noopener noreferrer"&gt;http://localhost:3000/admin&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Edit the &lt;code&gt;app/page.tsx&lt;/code&gt; file to make changes. The page auto-updates as you edit.&lt;/li&gt;
&lt;li&gt;Provide your own project ID in the &lt;code&gt;/sanity/config.ts&lt;/code&gt; file.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Access to Our Sanity Studio 😎🚀
&lt;/h2&gt;

&lt;p&gt;Don't feel like setting up a new Sanity project from scratch? No worries! You can dive right into our Sanity Studio and see the magic firsthand. Just drop me a message on &lt;a href="https://twitter.com/UsulPro" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; or reach out in the &lt;a href="https://slack.sanity.io/" rel="noopener noreferrer"&gt;Sanity Community Slack&lt;/a&gt;. I'll get you an exclusive invite! But remember, with great power comes great responsibility... to edit content responsibly! 🕷️&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Details
&lt;/h2&gt;

&lt;p&gt;This project is built using NextJS, focusing on the app router and the Static Site Generation (SSG) approach. The NextJS app router facilitates efficient page routing and dynamic content rendering, while the SSG approach enhances performance, SEO, and scalability.&lt;/p&gt;

&lt;p&gt;The project utilizes a robust stack of key technologies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js&lt;/strong&gt;: 14.0.3&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React&lt;/strong&gt;: 18.2.0&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sanity Client (&lt;a class="mentioned-user" href="https://dev.to/sanity"&gt;@sanity&lt;/a&gt;/client)&lt;/strong&gt;: 6.4.9&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;next-sanity&lt;/strong&gt;: 6.0.3&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linaria (@linaria/core)&lt;/strong&gt;: 4.5.4&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;next-with-linaria&lt;/strong&gt;: 0.5.1&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;rxjs&lt;/strong&gt;: 7.8.1&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node.js&lt;/strong&gt;: 18.18.0&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript&lt;/strong&gt;: 5.2.2&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These technologies have been selected to ensure optimal performance and compatibility for our visual editing and live preview features.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contributing to the Project 🤝
&lt;/h2&gt;

&lt;p&gt;We love collaboration! If you're interested in contributing to this project, here's how you can get involved:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fork the repository.&lt;/li&gt;
&lt;li&gt;Create a new branch for your feature (&lt;code&gt;git checkout -b feature/AmazingFeature&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Commit your changes (&lt;code&gt;git commit -am 'Add some AmazingFeature'&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Push to the branch (&lt;code&gt;git push origin feature/AmazingFeature&lt;/code&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open a pull request.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We're excited to see your innovative ideas and contributions. Let's make web development more visually engaging together!&lt;/p&gt;

&lt;h2&gt;
  
  
  Credits
&lt;/h2&gt;

&lt;p&gt;This project was created at &lt;strong&gt;FocusReactive&lt;/strong&gt;, the expert consultancy for the modern web. We specialize in helping clients beat the competition and accelerate business growth. With deep expertise in headless CMS, NextJS, and eCommerce, we deliver cutting-edge solutions that prioritize your business goals.&lt;/p&gt;

&lt;h3&gt;
  
  
  Our Expertise
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Content-Centric Websites&lt;/strong&gt;: We have deep experience in building extendable, SEO-optimized content and marketing websites with advanced CMS integrations and analytics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Headless eCommerce&lt;/strong&gt;: Our next-generation, content-rich, and performant online eCommerce websites come with end-to-end integrations to power your digital business.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Headless CMS Consulting&lt;/strong&gt;: We offer multi-channel CMS development, modeling, customization, and support to help you manage your content seamlessly across various platforms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web Performance&lt;/strong&gt;: Our experts can audit, transform the architecture, and optimize your website to meet the 100 SCORE Core Web Vitals for exceptional web performance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're looking for expertise in headless CMS, NextJS, or eCommerce, get in touch with &lt;strong&gt;FocusReactive&lt;/strong&gt; today. Visit our website at &lt;a href="https://focusreactive.com/" rel="noopener noreferrer"&gt;focusreactive.com&lt;/a&gt; to learn more about how we can help you accelerate your business growth.&lt;/p&gt;



&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;This project is licensed under the MIT License. © 2023 FocusReactive.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>typescript</category>
      <category>headless</category>
      <category>contentcreating</category>
    </item>
    <item>
      <title>A Deep Dive into Sanity's Visual Editing and Presentation Tool: The developer view</title>
      <dc:creator>Oleg Proskurin</dc:creator>
      <pubDate>Tue, 28 Nov 2023 12:53:52 +0000</pubDate>
      <link>https://dev.to/focusreactive/a-deep-dive-into-sanitys-visual-editing-and-presentation-tool-the-developer-view-513j</link>
      <guid>https://dev.to/focusreactive/a-deep-dive-into-sanitys-visual-editing-and-presentation-tool-the-developer-view-513j</guid>
      <description>&lt;p&gt;Hey there! Our colleagues over at &lt;a href="http://sanity.io/" rel="noopener noreferrer"&gt;Sanity.io&lt;/a&gt;, who are always at the forefront of structured content, have just rolled out two super cool features: &lt;strong&gt;Visual Editing&lt;/strong&gt; and the &lt;strong&gt;Presentation tool&lt;/strong&gt;. They announced these features at their online event on November 17th, 2023, and it was truly inspiring news in the headless CMS world!&lt;/p&gt;

&lt;p&gt;Here at &lt;strong&gt;FocusReactive&lt;/strong&gt;, we're like kids in a candy store when it comes to new tech goodies, especially if they can enhance our CMS and editing workflows. So, when Sanity dropped these new features, we were all over them, eager to see how they could make the content editing experience even better.&lt;/p&gt;

&lt;p&gt;Being the tech enthusiasts we are, we couldn't resist putting together a demo project to test and show off Sanity's new features. We wanted to get a feel for how they work and see how handy they could be in real-world web development scenarios.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn5qxlcz44ajesjlkoai6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn5qxlcz44ajesjlkoai6.png" alt="Sanity's presentation tool demo by FocusReactive" width="800" height="410"&gt;&lt;/a&gt;&lt;br&gt;
Now, we've made this project available for all you curious folks out there at &lt;a href="https://demo-visual-editing-sanity.vercel.app/" rel="noopener noreferrer"&gt;https://demo-visual-editing-sanity.vercel.app/&lt;/a&gt;. You will see overlays on mouse hover - this is only for demo of course.  But the real &lt;strong&gt;magic&lt;/strong&gt; happens in the Sanity Studio. If you're as eager to dig in as we are and want to check out everything for yourself, don't hesitate to drop me a line for an &lt;strong&gt;invite&lt;/strong&gt; to our demo Sanity Studio where we store all the content for this project.&lt;/p&gt;
&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Visual Editing and Presentation: An Overview&lt;/li&gt;
&lt;li&gt;The Presentation Tool: Ground-Breaking Features&lt;/li&gt;
&lt;li&gt;The Magic of Overlays&lt;/li&gt;
&lt;li&gt;Setting Up the Presentation Tool&lt;/li&gt;
&lt;li&gt;Configuring Document Locations&lt;/li&gt;
&lt;li&gt;Multiple Presentations: For Varied Purposes&lt;/li&gt;
&lt;li&gt;Conclusion&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Visual Editing and Presentation: An Overview
&lt;/h2&gt;

&lt;p&gt;The newly introduced &lt;strong&gt;Visual Editing&lt;/strong&gt; feature provides an innovative approach to content editing in Sanity Studio. It's enabled by the &lt;strong&gt;Presentation&lt;/strong&gt; tool which offers an interactive layout for live preview and visual editing within the studio. This tool complements the existing &lt;strong&gt;Desk Structure&lt;/strong&gt; tool, providing editors with a more thorough understanding of content and its influence on the interface.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feqp1izi4i6o99jel48ww.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feqp1izi4i6o99jel48ww.png" alt="Sanity's presentation tool interface" width="800" height="583"&gt;&lt;/a&gt;&lt;br&gt;
Contrary to the Structure tool, the primary emphasis here is on the page itself. This is highly beneficial as it allows for your content management to be streamlined, accommodating various content types and enhancing your content architecture. &lt;strong&gt;Actual page&lt;/strong&gt; to be rendered by your application directly within the CMS. Furthermore, as will be demonstrated later, this presentation layer is smoothly integrated into numerous CMS actions, making it a primary component in your Sanity Studio.&lt;/p&gt;

&lt;p&gt;On the right side, you will find &lt;strong&gt;all documents&lt;/strong&gt; containing content for your previewing page. Selecting one of these documents will open a familiar editor form where you can interact with your document.&lt;/p&gt;

&lt;p&gt;Significantly, any modifications made in the editor will be instantaneously &lt;strong&gt;reflected&lt;/strong&gt; in the preview.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Presentation Tool: Ground-Breaking Features
&lt;/h2&gt;

&lt;p&gt;The Presentation tool, your new best friend for visual editing and content authoring, comes packed with a plethora of awe-inspiring features. Nestled at the top panel of the tool, they're there to make your life as a content editor a touch more delightful and a whole lot easier, enabling real-time content updates and seamless collaboration. Let's embark on a journey through them:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq390ccll4fjuhsdbpqle.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq390ccll4fjuhsdbpqle.png" alt="Sanity's presentation tool features" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Mobile/Desktop View (1)
&lt;/h3&gt;

&lt;p&gt;This feature allows you to flip between device views, giving you a clear understanding of how your content morphs to fit different screen sizes. In this digital age, it's absolutely vital to ensure both &lt;strong&gt;mobile&lt;/strong&gt; and &lt;strong&gt;desktop&lt;/strong&gt; versions are in tip-top shape - a key aspect of web development. Now, you, the editor, can effortlessly switch and monitor how the page appears on desktop and mobile devices. We've noticed there aren't any settings to specify a range of screen widths, but we're keeping our fingers crossed that this feature will be incorporated in upcoming versions.&lt;/p&gt;
&lt;h3&gt;
  
  
  Published/Draft View (2)
&lt;/h3&gt;

&lt;p&gt;Seamlessly transition between &lt;strong&gt;published&lt;/strong&gt; and &lt;strong&gt;draft&lt;/strong&gt; versions of your content, making the editing process a breeze. From my personal experience, this is the most sought-after feature, with numerous clients requesting its implementation on their projects. It's indeed crucial to have access to both - the version currently published on production and the one you're editing.&lt;/p&gt;
&lt;h3&gt;
  
  
  Browse the Site and See Connected Documents (3)
&lt;/h3&gt;

&lt;p&gt;This tool empowers you to view all documents linked to a specific page. For example, you can view the footer and header, which could be separate documents. We'll delve deeper into visual editing in subsequent sections. But for now, it's worth noting that the developers at Sanity were incredibly considerate and included this feature in the initial release. The fact that you can now &lt;strong&gt;browse&lt;/strong&gt; your site directly through the Presentation window and as you navigate to a new page - you'll see all &lt;strong&gt;related documents&lt;/strong&gt;. To avoid any confusion when clicking links, you can simply temporarily disable the overlay functionality.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Magic of Overlays
&lt;/h2&gt;

&lt;p&gt;Remember those head-scratching moments when you couldn't find a specific piece of text in your CMS, even though it was staring right at you on the page? Well, those days are long gone! Now, all it takes is a simple click. When you hover your mouse over any piece of content - be it &lt;strong&gt;plain text&lt;/strong&gt;, &lt;strong&gt;formatted text&lt;/strong&gt;, or even an &lt;strong&gt;image&lt;/strong&gt;, you'll see a box overlay pop up, introducing you to the world of visual and intuitive editing.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frxqexupqddubfuadmmvi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frxqexupqddubfuadmmvi.png" alt="Sanity visual editing overlays" width="800" height="481"&gt;&lt;/a&gt;&lt;br&gt;
This nifty overlay feature on preview pages is your new best friend in visual editing and content management. It's a super handy and efficient way for you to pick out a specific piece of content and then directly open the studio to edit that particular &lt;strong&gt;field&lt;/strong&gt; in the document.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7v8ljjgivgykin40qhhn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7v8ljjgivgykin40qhhn.png" alt="Sanity visual editing overlays" width="800" height="481"&gt;&lt;/a&gt;&lt;br&gt;
And here's the cherry on top - it can even detect which document contains this content and which specific field in that document you need. It's like having your own personal content detective! Isn't it just magical, this new feature we've got, enhancing content management and content visualization?&lt;/p&gt;

&lt;p&gt;This feature is a real lifesaver, especially when you're dealing with nested objects. In such cases, it can often feel like you're trying to find a needle in a haystack. But with the overlay feature, this task becomes a breeze, making your visual editing process and content management smoother and more efficient. So, go ahead and give it a try!&lt;/p&gt;
&lt;h2&gt;
  
  
  Setting Up the Presentation Tool
&lt;/h2&gt;

&lt;p&gt;Getting the Presentation tool up and running is a straightforward process. You need to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Upgrade your Sanity Studio version to the latest&lt;/li&gt;
&lt;li&gt;&lt;code&gt;import { presentationTool } from 'sanity/presentation';&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Insert &lt;code&gt;presentationTool&lt;/code&gt; to plugins in your Sanity config&lt;/li&gt;
&lt;li&gt;Connect your &lt;a href="https://github.com/focusreactive/Demo-VisualEditing-Sanity" rel="noopener noreferrer"&gt;frontend&lt;/a&gt; to Sanity Headless CMS
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// sanity.config.ts&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineConfig&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;sanity&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;deskTool&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;sanity/desk&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;presentationTool&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;sanity/presentation&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="c1"&gt;// ... your config,&lt;/span&gt;

    &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nf"&gt;presentationTool&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;previewUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;origin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;location&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;undefined&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;http://localhost:3000&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;origin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;draftMode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;enable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/draft&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="nx"&gt;locate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="nf"&gt;deskTool&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;structure&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;deskStructure&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;defaultDocumentNode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="c1"&gt;// ... other plugins&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;presentationTool({ ... })&lt;/code&gt;: This is the configuration object for the Presentation tool. Inside this object, the following properties are defined:&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;previewUrl&lt;/code&gt;: This property defines the &lt;strong&gt;preview&lt;/strong&gt; URL for the frontend application. It checks if the location is defined and sets the origin accordingly. It also enables &lt;strong&gt;draft&lt;/strong&gt; mode by specifying the endpoint for draft content.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;locate&lt;/code&gt;: This property specifies the location of the documents used in the presentation. It is a function that takes the document ID and type and returns an array of objects containing the title and URL of the documents.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In order to enable previewing pages in a draft mode you have to provide this endpoint in your NextJS project integrated with Sanity. This is how this file looks in our project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// app/api/draft/route.ts&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;validatePreviewUrl&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@sanity/preview-url-secret&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;draftMode&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;next/headers&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;redirect&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;next/navigation&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@/sanity/client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;sanityReadToken&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@/environment&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;clientWithToken&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;withConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;sanityReadToken&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;GET&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;isValid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;redirectTo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;validatePreviewUrl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;clientWithToken&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;isValid&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Invalid secret&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;401&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;draftMode&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;enable&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="nf"&gt;redirect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;redirectTo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is an example of how to enable preview and draft mode for &lt;a href="http://sanity.io/" rel="noopener noreferrer"&gt;Sanity&lt;/a&gt; using the Presentation tool. The &lt;code&gt;GET&lt;/code&gt; function handles api requests to that endpoint. Inside the &lt;code&gt;GET&lt;/code&gt; function, it performs the following steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It validates the preview URL using the &lt;code&gt;validatePreviewUrl&lt;/code&gt; function from &lt;code&gt;@sanity/preview-url-secret&lt;/code&gt; module. If the URL is not valid, it returns a response with a status of 401 (Unauthorized).&lt;/li&gt;
&lt;li&gt;It enables draft mode using the &lt;code&gt;draftMode().enable()&lt;/code&gt; function from the &lt;code&gt;next/headers&lt;/code&gt; module.&lt;/li&gt;
&lt;li&gt;It redirects the user to the specified &lt;code&gt;redirectTo&lt;/code&gt; URL using the &lt;code&gt;redirect&lt;/code&gt; function from the &lt;code&gt;next/navigation&lt;/code&gt; module.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This code snippet is essential for enabling preview and draft mode in a Next.js project when integrating with Sanity for efficient content management.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuring Document Locations
&lt;/h2&gt;

&lt;p&gt;The Presentation tool introduces the concept of &lt;strong&gt;Document Locations&lt;/strong&gt;. This feature shows where a document is used in different parts of your interface, helping editors understand the implications of a single document change.&lt;/p&gt;

&lt;p&gt;The basic locate example can be found in the Sanity &lt;a href="https://www.sanity.io/docs/configuring-the-presentation-tool#a1dcd7c21042" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;. However, I will show you what we finally achieved in our project. We simply imported the necessary modules and set up the necessary configurations.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;DocumentLocationResolver&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sanity/presentation&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;map&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;rxjs&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Pass 'context' as the second argument&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;locate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;DocumentLocationResolver&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Set up locations for post documents&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dynamicPage&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Subscribe to the latest slug and title&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;doc$&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;documentStore&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listenQuery&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="s2"&gt;`*[_id == $id][0]{slug,documentTitle}`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;perspective&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;previewDrafts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;// returns a draft article if it exists&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// Return a streaming list of locations&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;doc$&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pipe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// If the document doesn't exist or have a slug, return null&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;doc&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;locations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
              &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Home Page&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;],&lt;/span&gt;
          &lt;span class="p"&gt;};&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;locations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
              &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;documentTitle&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Untitled&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
          &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="p"&gt;};&lt;/span&gt;
      &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Well, it wasn't easy to set them up from the first attempt. But the result was more than exciting! After adding that code, a new dropdown appeared in the form editor.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpj7wnisa0i83ao0ajz5x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpj7wnisa0i83ao0ajz5x.png" alt="Sanity Studio 'used on page' references" width="800" height="482"&gt;&lt;/a&gt;&lt;br&gt;
From there, I can simply select any of the pages where the visual editing content is presented. With just one click, I can jump to the content management tool, observe the page, and preview all the changes I made.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multiple Presentations: For Varied Purposes
&lt;/h2&gt;

&lt;p&gt;You have the freedom to improve your studio by incorporating &lt;strong&gt;different&lt;/strong&gt; Presentation tools and using them for various content types. This enables you to streamline your content management workflow and meet the specific requirements of different frontends. By creating separate Presentations for each frontend, you can personalize and customize your content to provide a smooth and personalized user experience. This single source of truth approach is beneficial for all content creators.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the underlying technology?
&lt;/h2&gt;

&lt;p&gt;Several new technologies and methods were utilized to achieve the final result. A comprehensive explanation of these technologies would require a separate article, so we will briefly discuss the main points of how it operates here.&lt;/p&gt;

&lt;h3&gt;
  
  
  Content Source Maps
&lt;/h3&gt;

&lt;p&gt;This technology enhances the standard response from Headless CMS when content is requested. In this scenario, we receive &lt;strong&gt;extra&lt;/strong&gt; data along with the content itself, providing information on how the content is &lt;strong&gt;mapped&lt;/strong&gt; to the fields and paths in the document schema from which it was obtained. This is required to later open these fields in Sanity Studio for editing. Sanity has developed a complete &lt;a href="https://github.com/sanity-io/content-source-maps" rel="noopener noreferrer"&gt;specification&lt;/a&gt; for the Content Source Maps format. It would be beneficial if this could be adopted by other Headless CMSs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Steganographic content appending
&lt;/h3&gt;

&lt;p&gt;Having Content Source Maps on the front end is insufficient. It is necessary to link that data to specific content pieces that eventually appear on the page. Here, the library developed by Vercel in collaboration with Sanity, &lt;a href="https://www.npmjs.com/package/@vercel/stega" rel="noopener noreferrer"&gt;@vercel/stega&lt;/a&gt;, comes into play. It allows us to add to the standard text data containing page content, browser-unreadable characters that &lt;strong&gt;encode&lt;/strong&gt; the needed information. Hence, every text piece or picture containing an alt, carries information about &lt;strong&gt;where this data is stored&lt;/strong&gt; in the CMS. Alt tags are always added to images, correct?&lt;/p&gt;

&lt;h3&gt;
  
  
  Overlays
&lt;/h3&gt;

&lt;p&gt;Overlays consist of a small &lt;a href="https://github.com/sanity-io/visual-editing/blob/main/packages/overlays/README.md" rel="noopener noreferrer"&gt;library&lt;/a&gt; that identifies all elements on a page &lt;strong&gt;containing&lt;/strong&gt; steganographic inserts and renders them interactive. Hovering over such an element will display a pop-up rectangle suggesting &lt;strong&gt;interaction&lt;/strong&gt; with this element. If this occurs on a separate page, such as a preview branch embedded in Vercel, clicking on this element will open Sanity Studio in a new tab, and the necessary document and the corresponding inserts within this document will be immediately accessible. If you are already within Sanity Studio - in the Presentation tool, clicking on the element will open the editor on the right side.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sanity Studio API
&lt;/h3&gt;

&lt;p&gt;This is the final component that enables visual editing to fully function. Here we have two options. The first is not an API, but a URL &lt;strong&gt;format&lt;/strong&gt; within Sanity Studio that allows the generation of links that open not just a specific document, but also a &lt;strong&gt;field&lt;/strong&gt; within that document. &lt;/p&gt;

&lt;p&gt;Here's an example of such a URL: &lt;a href="https://mvp-nextjs-sanity-git-feature-live-editing-focusreactive.vercel.app/admin/desk/dynamicPage;29d1e996-7d16-4fb7-94fa-ecb6674cf3e3,path=content%5B0%5D.title" rel="noopener noreferrer"&gt;https://mvp-nextjs-sanity-git-feature-live-editing-focusreactive.vercel.app/admin/desk/dynamicPage;29d1e996-7d16-4fb7-94fa-ecb6674cf3e3,path=content[0].title&lt;/a&gt;. The key thing here is the &lt;strong&gt;path&lt;/strong&gt; parameter, which defines the path to the field to be focused on. This is actually a simplified example, Sanity provides considerable flexibility, allowing for opening &lt;strong&gt;multiple&lt;/strong&gt; panels in split view, specifying &lt;strong&gt;different&lt;/strong&gt; views to open instead of a standard form, and more.&lt;/p&gt;

&lt;p&gt;This is extremely useful for arranging easy access to data within a dataset. The second is &lt;strong&gt;internal routing&lt;/strong&gt;, which allows the same thing, but within Sanity Studio.&lt;/p&gt;

&lt;p&gt;Observe how these libraries are structured. Each has its own interaction interface. Each performs only its own necessary part of the task and is not dependent on other libraries and technologies. This provides a vast potential for expansion and redefinition. This could be the start of an interesting &lt;strong&gt;new trend&lt;/strong&gt;, transforming Headless CMS into a mature and mainstream website building solution.&lt;/p&gt;

&lt;p&gt;It is hoped that these technologies will gain popularity among other CMS and we will soon witness new impressive solutions in our field.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Sanity has always been a superstar in the CMS world, thanks to its flexibility and extensibility. I'm a big fan of how they introduce new features as separate &lt;strong&gt;customizable&lt;/strong&gt; blocks - it's a hit with me and I know a lot of developers feel the same way. Plus, it's super cool that everything works straight &lt;strong&gt;out of the box&lt;/strong&gt;, no complicated customization needed in the basic version.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2k1qsyg2dzr15aayt0fa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2k1qsyg2dzr15aayt0fa.png" alt="Custom Sanity visual editing plugin by FocusReactive" width="800" height="474"&gt;&lt;/a&gt;&lt;br&gt;
What's got me really excited is that the new features we're talking about here are a big leap forward in making life easier for &lt;strong&gt;content creators&lt;/strong&gt;. It's a fantastic new addition to the Headless CMSs that offer visual editing and live previews. We're a curious bunch at FocusReactive, always keen to explore this area. We've been keeping an eye on and playing around with similar features in Sanity Studio for quite some time. We're firm believers that creating a user-friendly environment for content development is just as important as being able to customize the CMS itself.&lt;/p&gt;

&lt;p&gt;If you're on the same page, or if you need some expert advice on Headless CMS and the latest web technologies, don't be shy - get in touch &lt;a href="https://focusreactive.com/#mail-us" rel="noopener noreferrer"&gt;with us&lt;/a&gt;. I'm buzzing for you to try out these Visual Editing and Presentation tools. Trust me, they're going to take your content creation to a whole new level and help you create content that really stands out. We really value your thoughts and would love to hear what you think. Feel free to drop me a line on &lt;a href="https://twitter.com/UsulPro" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; or the Sanity Community Slack at &lt;strong&gt;&lt;a class="mentioned-user" href="https://dev.to/usulpro"&gt;@usulpro&lt;/a&gt;&lt;/strong&gt;. Can't wait to hear from you!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Save Time and Stay Informed: 9 Must-Know Updates in NextJS v14 🔥</title>
      <dc:creator>Oleg Proskurin</dc:creator>
      <pubDate>Mon, 06 Nov 2023 12:04:04 +0000</pubDate>
      <link>https://dev.to/usulpro/save-time-and-stay-informed-9-must-know-updates-in-nextjs-v14-5fnp</link>
      <guid>https://dev.to/usulpro/save-time-and-stay-informed-9-must-know-updates-in-nextjs-v14-5fnp</guid>
      <description>&lt;p&gt;NextJS, the popular React-based framework, recently released its highly anticipated major version, NextJS v14, in October 2023. With this release, NextJS has introduced a range of new features and improvements, emphasizing its commitment to providing a reliable and stable tool for modern web development. In this blog post, we will delve into some of the key updates in NextJS v14 that are essential for every React developer to know.&lt;/p&gt;

&lt;p&gt;1. Stable NextJS Server Actions&lt;br&gt;
2. Viewport Page Configuration&lt;br&gt;
3. Minimum Node.js Version&lt;br&gt;
4. Improved Font Optimization&lt;br&gt;
5. ImageResponse Import Update&lt;br&gt;
6. Static Exports with &lt;code&gt;output: 'export'&lt;/code&gt;&lt;br&gt;
7. Image OnLoad Callback&lt;br&gt;
8. Remote Image Patterns in NextJS Config&lt;br&gt;
9. Fetch Logging in Dev Mode&lt;br&gt;
NextJS Conf 2023&lt;/p&gt;
&lt;h2&gt;
  
  
  1. Stable NextJS Server Actions
&lt;/h2&gt;

&lt;p&gt;Server Actions, introduced in NextJS v13, have now reached stability, making them ready for production use. This powerful feature simplifies server-side code execution by creating API endpoints and serverless functions. With Server Actions in Next js 14, developers can seamlessly handle server-side operations, such as form submissions, by encapsulating the necessary logic within a React component.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;FormPage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;performServerAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;FormData&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;use server&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;submitFormData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt; &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;performServerAction&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="cm"&gt;/* form inputs */&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Submit&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Discover more about Server Actions and how to integrate them into your Next JS projects in the &lt;a href="https://nextjs.org/docs/app/api-reference/functions/server-actions"&gt;NextJS documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Viewport Page Configuration
&lt;/h2&gt;

&lt;p&gt;Customizing viewport settings in NextJS has become even more straightforward with the introduction of a dedicated API. Instead of relying on the Next js &lt;code&gt;metadata&lt;/code&gt; object for SEO and meta tags, you can now export a &lt;code&gt;viewport&lt;/code&gt; object from your page or layout files. This allows you to define viewport options and even specify media attributes for granular control over different color schemes and device widths.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Viewport&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;next&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;viewport&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Viewport&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;themeColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;black&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="c1"&gt;// or you can even specify media attributes&lt;/span&gt;
    &lt;span class="na"&gt;themeColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;media&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;(prefers-color-scheme: light)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cyan&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;media&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;(prefers-color-scheme: dark)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;black&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;colorScheme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dark&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="c1"&gt;// below the default values, you don't need to specify them&lt;/span&gt;
  &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;device-width&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;initialScale&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;maximumScale&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To generate viewport values dynamically, you can use the &lt;a href="https://nextjs.org/docs/app/api-reference/functions/generate-viewport#generateviewport-function-1"&gt;generateViewport&lt;/a&gt; function. Find more details about the viewport object in the &lt;a href="https://nextjs.org/docs/app/api-reference/functions/generate-viewport#the-viewport-object"&gt;NextJS documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Minimum Node.js Version
&lt;/h2&gt;

&lt;p&gt;NextJS v14 requires a minimum Node.js version of at least &lt;code&gt;v18.17&lt;/code&gt;. It is essential to update your project's &lt;code&gt;engine&lt;/code&gt; requirements accordingly to ensure compatibility with the latest NextJS version.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Improved Font Optimization
&lt;/h2&gt;

&lt;p&gt;NextJS offers an impressive Font Optimization feature, enabling self-hosting of fonts used in your application. With the new version, you can import this functionality directly from &lt;code&gt;next/font&lt;/code&gt;. This enhancement supports both local and Google Fonts and even integrates seamlessly with Tailwind CSS. Explore more about optimizing fonts in the NextJS &lt;a href="https://nextjs.org/docs/app/building-your-application/optimizing/fonts#google-fonts"&gt;documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. ImageResponse Import Update
&lt;/h2&gt;

&lt;p&gt;The import for &lt;code&gt;ImageResponse&lt;/code&gt;, a useful tool for generating social images, has changed to &lt;code&gt;next/og&lt;/code&gt; instead of &lt;code&gt;next/server&lt;/code&gt;. This update ensures consistency and clarity in the import statements. See details in &lt;a href="https://nextjs.org/docs/app/api-reference/functions/image-response"&gt;documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Static Exports with &lt;code&gt;output: 'export'&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;NextJS now provides the option to generate static HTML/CSS/JS files only, allowing you to host your application from any static file server. This improvement boosts performance optimization by excluding server-side JS code from the client bundle. Learn more about static exports in the NextJS &lt;a href="https://nextjs.org/docs/app/building-your-application/deploying/static-exports"&gt;documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Image OnLoad Callback
&lt;/h2&gt;

&lt;p&gt;With the introduction of the &lt;code&gt;onLoad&lt;/code&gt; callback in the &lt;code&gt;next/image&lt;/code&gt; component, developers gain more control over actions to perform after an image has finished loading in the browser. This functionality allows for various post-loading operations, such as additional rendering or data manipulation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Image&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next/image&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;MyImageComponent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handleImageLoad&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SyntheticEvent&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;HTMLImageElement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Event&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Image loaded!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentTarget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;naturalWidth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentTarget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;naturalHeight&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// Perform additional actions after the image is loaded&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Image&lt;/span&gt;
      &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/path/to/image.jpg"&lt;/span&gt;
      &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Image"&lt;/span&gt;
      &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="na"&gt;onLoad&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleImageLoad&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note that the deprecated &lt;code&gt;onLoadingComplete&lt;/code&gt; prop has been replaced by the &lt;code&gt;onLoad&lt;/code&gt; callback. Check out the &lt;code&gt;onLoad&lt;/code&gt; &lt;a href="https://nextjs.org/docs/app/api-reference/components/image#onload"&gt;documentation&lt;/a&gt; for more details.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Remote Image Patterns in NextJS Config
&lt;/h2&gt;

&lt;p&gt;The new version of NextJS configuration introduces the &lt;code&gt;remotePatterns&lt;/code&gt; option, which allows you to define patterns for remote images. This offers greater flexibility in including images from different remote sources compared to the deprecated &lt;code&gt;domains&lt;/code&gt; option.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kr"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;images&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;remotePatterns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;hostname&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;example.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;pathname&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/account123/**&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;hostname&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;example2.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;pathname&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/images/**&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;domains&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;example.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// Deprecated option&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Embrace the power of &lt;code&gt;remotePatterns&lt;/code&gt; to enhance your NextJS application with remote images. More details can be found in the NextJS &lt;a href="https://nextjs.org/docs/app/api-reference/components/image#remotepatterns"&gt;documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Fetch Logging in Dev Mode
&lt;/h2&gt;

&lt;p&gt;NextJS provides the ability to log fetch calls during development by configuring the logging level. By modifying the &lt;code&gt;next.config.js&lt;/code&gt; file, you can control whether the full URL is logged to the console, aiding in debugging and monitoring activities.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kr"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;logging&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;fetches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;fullUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enabling &lt;code&gt;fullUrl&lt;/code&gt; will log the complete URL of fetched data to the console, helping you track and troubleshoot network requests.&lt;/p&gt;

&lt;h2&gt;
  
  
  NextJS Conf 2023
&lt;/h2&gt;

&lt;p&gt;NextJS v14 was unveiled alongside future plans at the NextJS Conf held on October 26, 2023. This conference provided valuable insights into NextJS's roadmap and the web development industry as a whole. If you want to stay updated, we recommend watching the &lt;a href="https://www.youtube.com/watch?v=8q2q_820Sx4"&gt;main stage&lt;/a&gt; or reading our &lt;a href="https://focusreactive.com/recap-of-next-js-14-announcement-and-2023-conference-highlights/"&gt;NextJS Conf 2023 recap&lt;/a&gt; for the most important highlights.&lt;/p&gt;

&lt;p&gt;Stay motivated, keep pushing boundaries, and happy coding!&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>react</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Elon Musk Launches AI Chatbot Grok - A Game Changer in the AI Landscape 🧠</title>
      <dc:creator>Oleg Proskurin</dc:creator>
      <pubDate>Sun, 05 Nov 2023 16:24:40 +0000</pubDate>
      <link>https://dev.to/usulpro/elon-musk-launches-ai-chatbot-grok-a-game-changer-in-the-ai-landscape-obm</link>
      <guid>https://dev.to/usulpro/elon-musk-launches-ai-chatbot-grok-a-game-changer-in-the-ai-landscape-obm</guid>
      <description>&lt;p&gt;Elon Musk 🚀, the visionary entrepreneur behind Tesla and SpaceX, has once again made headlines with the launch of an &lt;em&gt;AI chatbot&lt;/em&gt; called &lt;strong&gt;'Grok'&lt;/strong&gt; Developed by Musk's artificial intelligence startup &lt;strong&gt;xAI&lt;/strong&gt;, &lt;strong&gt;Grok&lt;/strong&gt; aims to outperform OpenAI's ChatGPT and revolutionize the field of AI chatbots.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Grok&lt;/strong&gt;, available exclusively to a limited number of users in the United States, is designed to assist users with its &lt;strong&gt;real-time&lt;/strong&gt; knowledge of the world. According to Musk, Grok possesses a &lt;em&gt;"unique and fundamental advantage"&lt;/em&gt; over other AI systems and can answer even the most challenging questions with a touch of wit.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1720660977786433810-121" src="https://platform.twitter.com/embed/Tweet.html?id=1720660977786433810"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1720660977786433810-121');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1720660977786433810&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;One of the primary motivations behind building &lt;strong&gt;Grok&lt;/strong&gt; is to create AI tools that empower research and innovation. Musk and the xAI team envision Grok as a powerful research assistant, capable of providing quick access to relevant information, processing data, and generating new ideas.&lt;/p&gt;

&lt;p&gt;Grok's engine, &lt;strong&gt;Grok-1&lt;/strong&gt;, has already demonstrated its capabilities in several academic tests. It has outperformed OpenAI's ChatGPT-3.5 in various mathematics and coding evaluations, showcasing the remarkable progress made by xAI in training Language Learning Models (LLMs).&lt;/p&gt;

&lt;p&gt;However, while &lt;strong&gt;Grok&lt;/strong&gt; has shown exceptional performance, it has not surpassed &lt;strong&gt;OpenAI&lt;/strong&gt;'s most advanced model, &lt;strong&gt;GPT-4&lt;/strong&gt;, which benefits from significantly larger training data and compute resources. Musk believes that &lt;strong&gt;xAI&lt;/strong&gt;'s rapid progress in training LLMs with exceptional efficiency will soon bridge this gap.&lt;/p&gt;

&lt;p&gt;At present, Grok is available on the &lt;strong&gt;X platform&lt;/strong&gt; for a monthly subscription fee of &lt;strong&gt;$16&lt;/strong&gt; under the early &lt;a href="https://grok.x.ai/"&gt;access program&lt;/a&gt;. The xAI team aims to improve and enhance Grok rapidly based on user feedback. Safety measures will also be implemented to prevent any malicious use of the chatbot.&lt;/p&gt;

&lt;p&gt;Elon Musk's &lt;strong&gt;Grok&lt;/strong&gt; represents a significant milestone in the &lt;em&gt;AI landscape&lt;/em&gt;, offering users a chatbot that combines intelligence, wit, and &lt;strong&gt;real-time knowledge&lt;/strong&gt;. With its potential to assist in research, innovation, and problem-solving, Grok is set to become a go-to tool for those seeking reliable and intelligent AI assistance.&lt;/p&gt;

&lt;p&gt;Stay tuned for more updates and new capabilities from xAI as they continue to push the boundaries of AI technology.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
