<?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: Srikant Sahoo</title>
    <description>The latest articles on DEV Community by Srikant Sahoo (@srikant_code).</description>
    <link>https://dev.to/srikant_code</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%2F240847%2Fe5c6d587-6243-4b72-9154-881e7a28b55d.png</url>
      <title>DEV Community: Srikant Sahoo</title>
      <link>https://dev.to/srikant_code</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/srikant_code"/>
    <language>en</language>
    <item>
      <title>Discover | Apple Vision👓 Concept App using Netlify's Cache revalidation &amp; Next JS SSR</title>
      <dc:creator>Srikant Sahoo</dc:creator>
      <pubDate>Sun, 12 May 2024 02:45:20 +0000</pubDate>
      <link>https://dev.to/srikant_code/discover-apple-vision-concept-app-using-netlifys-cache-revalidation-next-js-ssr-1ifj</link>
      <guid>https://dev.to/srikant_code/discover-apple-vision-concept-app-using-netlifys-cache-revalidation-next-js-ssr-1ifj</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/netlify"&gt;Netlify Dynamic Site Challenge&lt;/a&gt;: Clever Caching&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;This project showcases three key features of Netlify, each feature is specifically demonstrated through a different application that I made:&lt;/p&gt;

&lt;p&gt;Link to Demo - &lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://apple-vision-concept-dynamic-site.netlify.app/" rel="noopener noreferrer"&gt;
      apple-vision-concept-dynamic-site.netlify.app
    &lt;/a&gt;
&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;Home page screenshot&lt;br&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%2Fwrkhyfddo0sbyvtflh3j.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%2Fwrkhyfddo0sbyvtflh3j.png" alt="Home page screenshot" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Link to all my submissions
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Memories App Concept - &lt;div class="ltag__link"&gt;
  &lt;a href="/srikant_code" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hXDXPWFt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://media.dev.to/cdn-cgi/image/width%3D150%2Cheight%3D150%2Cfit%3Dcover%2Cgravity%3Dauto%2Cformat%3Dauto/https%253A%252F%252Fdev-to-uploads.s3.amazonaws.com%252Fuploads%252Fuser%252Fprofile_image%252F240847%252Fe5c6d587-6243-4b72-9154-881e7a28b55d.png" alt="srikant_code"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/srikant_code/memories-apple-vision-concept-app-using-netlifys-image-cdn-1i0h" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Memories | Apple Vision👓 Concept App using Netlify's Image CDN &amp;amp; Next JS&lt;/h2&gt;
      &lt;h3&gt;Srikant Sahoo ・ May 12&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#netlifychallenge&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devchallenge&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Albums App Concept - &lt;div class="ltag__link"&gt;
  &lt;a href="/srikant_code" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hXDXPWFt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://media.dev.to/cdn-cgi/image/width%3D150%2Cheight%3D150%2Cfit%3Dcover%2Cgravity%3Dauto%2Cformat%3Dauto/https%253A%252F%252Fdev-to-uploads.s3.amazonaws.com%252Fuploads%252Fuser%252Fprofile_image%252F240847%252Fe5c6d587-6243-4b72-9154-881e7a28b55d.png" alt="srikant_code"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/srikant_code/albums-apple-vision-concept-app-using-netlifys-blobs-next-js-9ep" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Albums | Apple Vision👓 Concept App using Netlify's Blobs &amp;amp; Next JS&lt;/h2&gt;
      &lt;h3&gt;Srikant Sahoo ・ May 12&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#netlifychallenge&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devchallenge&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Discover App Concept - This article&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  What I Built | Concept / Ideation
&lt;/h2&gt;

&lt;p&gt;Hey👋, I'm Srikant Sahoo. I'm excited to present this project for the &lt;code&gt;Netlify Dynamic Site Challenge&lt;/code&gt;. This project is a cutting-edge concept user interface designed for virtual reality devices, taking inspiration from futuristic concepts like &lt;code&gt;Apple Vision👓&lt;/code&gt; to showcase how Netlify's capabilities can be leveraged to create such applications in future for VR use cases. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Side note for your reference - More info on Apple Vision Pro &lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.apple.com/newsroom/2024/02/apple-announces-more-than-600-new-apps-built-for-apple-vision-pro/" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--fNMvfB24--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.apple.com/newsroom/images/2024/02/apple-announces-more-than-600-new-apps-built-for-apple-vision-pro/tile/Apple-Vision-Pro-app-experiences-visionOS-home-lp.jpg.og.jpg%3F202404111544" height="420" class="m-0" width="800"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.apple.com/newsroom/2024/02/apple-announces-more-than-600-new-apps-built-for-apple-vision-pro/" rel="noopener noreferrer" class="c-link"&gt;
          Apple announces more than 600 new apps built for Apple Vision Pro - Apple
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Apple today announced incredible new apps that will be available on Apple Vision Pro beginning Friday, February 2.
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
        apple.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Why I built this Apple Vision Concept?
&lt;/h2&gt;

&lt;p&gt;The major question that I had was...&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How can I use all the 3 themes in one project🤔? &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Even though I had this question, I still started with creating a &lt;code&gt;Image Gallery&lt;/code&gt; using Image CDN. But then later on during development I figured out that I can instead convert it into a small virtual app called &lt;code&gt;Memories App&lt;/code&gt; instead of &lt;code&gt;Gallery App or Photos App&lt;/code&gt;, and similarly create more virtual apps for the other 2 prompts. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;All Photos&lt;/code&gt; view&lt;br&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%2Fsd8gl5bkgno7j9fwl0uk.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%2Fsd8gl5bkgno7j9fwl0uk.png" alt="All photos view" width="800" height="503"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So, the first thing that came into my mind was to create a mock concept environment for &lt;code&gt;Apple Vision Pro👓&lt;/code&gt; where users can see and interact with the 3 apps while being sitting at the couch. Thats how I proceeded and build the UX and then eventually developed it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Three apps navigation&lt;br&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%2Fylcgtettzxn3rxr5mt6o.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%2Fylcgtettzxn3rxr5mt6o.png" alt="Three app navigation" width="421" height="138"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Platform Primitives
&lt;/h2&gt;

&lt;p&gt;Below are the details on how I leveraged the &lt;code&gt;Netlify Image CDN&lt;/code&gt;, &lt;code&gt;Netlify Blobs&lt;/code&gt; storage and &lt;code&gt;Netlify's Cache Revalidation&lt;/code&gt; in three different virtual apps.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Discover App
&lt;/h3&gt;

&lt;p&gt;This app uses &lt;code&gt;Netlify's Cache Revalidation&lt;/code&gt; feature to fetch the latest articles from the web (Wikipedia Random API) using Server-Side Rendering technique of Next JS). It highlights how Netlify's Cache Revalidation can ensure users always have access to the most recent information on demand.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Below code -&amp;gt; uses the Next cache headers and tagName to revalidate the cache&lt;br&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%2F2wn706pkuuy0ion6dxdv.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%2F2wn706pkuuy0ion6dxdv.png" alt="code image" width="458" height="208"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&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%2Fgn73q2mgmbooyjnlw2xa.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%2Fgn73q2mgmbooyjnlw2xa.png" alt="screenshot of discover app" width="800" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I was new to &lt;code&gt;Next JS SSR&lt;/code&gt;, so I was initially facing difficulties with the SSR logic, but figured out how to tackle it to render the UI having the wiki article.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Albums App
&lt;/h3&gt;

&lt;p&gt;This app utilizes &lt;code&gt;Netlify's Blobs&lt;/code&gt; storage to store your albums and its contents. Once you land on the page, you are automatically assigned a unique username (kind of a mock authentication). &lt;/p&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%2F4lh7x3xmggke9u2gpwr5.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%2F4lh7x3xmggke9u2gpwr5.png" alt="screen capture of albums app" width="800" height="493"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have written a clever and complex logic to handle the albums data in blobs. You can also see other users' albums from the &lt;code&gt;Other's Albums&lt;/code&gt; tab. &lt;/p&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%2Fx5ymnky896hbnltl5exv.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%2Fx5ymnky896hbnltl5exv.png" alt="albums 1" width="800" height="605"&gt;&lt;/a&gt;&lt;/p&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%2Fy86td6tfdnk31yw6xfvb.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%2Fy86td6tfdnk31yw6xfvb.png" alt="albums 2" width="649" height="183"&gt;&lt;/a&gt;&lt;/p&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%2F2cfdj447zhd2bgtr1r8i.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%2F2cfdj447zhd2bgtr1r8i.png" alt="albums 3" width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Challenges Faced while developing this &lt;code&gt;Albums&lt;/code&gt; App
&lt;/h4&gt;

&lt;p&gt;I faced a lot of challenges while implementing this. &lt;br&gt;
Initially the blobs were only working in the &lt;code&gt;netlify dev&lt;/code&gt; env and was not working when I was deploying it (which was making it harder to debug). It bugged me for days, I needed to go through all the related documentation to understand and fix it.&lt;/p&gt;

&lt;p&gt;But spending 1-2 days on consistent bug fixing and observing the patterns, I finally figured out the way to work with blobs. &lt;/p&gt;

&lt;p&gt;I also faced challenges on the below&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implementation of expiration logic of blobs to free up space.&lt;/li&gt;
&lt;li&gt;How to tackle multiple users updating the same blob&lt;/li&gt;
&lt;li&gt;How to refresh the UI between the Memories and Albums App when anything is updated.
&lt;/li&gt;
&lt;li&gt;How to setup and use the blobs without using edge functions and instead use the Netlify APIs directly using the &lt;code&gt;use server&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;And as mentioned above on deployment part&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Memories App
&lt;/h3&gt;

&lt;p&gt;This app leverages &lt;code&gt;Netlify's Image CDN&lt;/code&gt; capability to display photos in responsive way. You can toggle the below tabs to filter images by date category and see images in different sizes. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;Days&lt;/code&gt; view&lt;br&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%2Foobq9amxe7byktpr43f0.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%2Foobq9amxe7byktpr43f0.png" alt="Days view" width="800" height="498"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It queries the Image CDN to render the most optimized version for quick loading of the images in an animated way. You can click any photo to see in good resolution. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Fetches the most optimized image using queries like &lt;code&gt;&amp;amp;w=64&amp;amp;q=75&lt;/code&gt;&lt;br&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%2Ftwwxbztgzobuzr7nfce0.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%2Ftwwxbztgzobuzr7nfce0.png" alt="Fetches the most optimized image using queries like  raw `&amp;amp;w=64&amp;amp;q=75` endraw " width="657" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;UI on clicking any image&lt;br&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%2F7cnitf7co3fgttljbnt8.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%2F7cnitf7co3fgttljbnt8.png" alt="UI on clicking any image" width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The Netlify's blob storage is used in the &lt;code&gt;Add photos to Albums&lt;/code&gt; button. It stores the opened photo to one of your Album (More on this below)&lt;/p&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%2Fvazoszbmnp3670b9c7o0.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%2Fvazoszbmnp3670b9c7o0.png" alt="add photos to albums" width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Disclaimer
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Please note that this project is not associated with any organization and is purely a result of my passion and 💘 for technology and innovation, which I have done both the UX design and developed it in the last 5-6 days.&lt;/p&gt;

&lt;p&gt;All the assets, graphics, and icons used in this project have been duly referenced in the project itself for transparency, and you can find the sources in the &lt;code&gt;References&lt;/code&gt; section of the project. This project is a testament to my commitment to ethical practices in software development.&lt;br&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%2Fer9m9myhayztjqce2y1g.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%2Fer9m9myhayztjqce2y1g.png" alt="references inside another app" width="800" height="536"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This project is a hobby endeavor that I'm proud of, and I hope it helps you to understand the potential of Netlify's capabilities.&lt;/p&gt;

&lt;p&gt;It took me more than 5 days to build this. Would really appreciate if you liked it and can like this post (🦄,💘). It will motivate me to create more such kind of creative applications and use Netlify in my future projects😄.&lt;/p&gt;

&lt;p&gt;Thank you&lt;/p&gt;




&lt;h4&gt;
  
  
  Link to all my submissions
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Memories App Concept - &lt;div class="ltag__link"&gt;
  &lt;a href="/srikant_code" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hXDXPWFt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://media.dev.to/cdn-cgi/image/width%3D150%2Cheight%3D150%2Cfit%3Dcover%2Cgravity%3Dauto%2Cformat%3Dauto/https%253A%252F%252Fdev-to-uploads.s3.amazonaws.com%252Fuploads%252Fuser%252Fprofile_image%252F240847%252Fe5c6d587-6243-4b72-9154-881e7a28b55d.png" alt="srikant_code"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/srikant_code/memories-apple-vision-concept-app-using-netlifys-image-cdn-1i0h" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Memories | Apple Vision👓 Concept App using Netlify's Image CDN &amp;amp; Next JS&lt;/h2&gt;
      &lt;h3&gt;Srikant Sahoo ・ May 12&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#netlifychallenge&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devchallenge&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Albums App Concept - &lt;div class="ltag__link"&gt;
  &lt;a href="/srikant_code" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hXDXPWFt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://media.dev.to/cdn-cgi/image/width%3D150%2Cheight%3D150%2Cfit%3Dcover%2Cgravity%3Dauto%2Cformat%3Dauto/https%253A%252F%252Fdev-to-uploads.s3.amazonaws.com%252Fuploads%252Fuser%252Fprofile_image%252F240847%252Fe5c6d587-6243-4b72-9154-881e7a28b55d.png" alt="srikant_code"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/srikant_code/albums-apple-vision-concept-app-using-netlifys-blobs-next-js-9ep" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Albums | Apple Vision👓 Concept App using Netlify's Blobs &amp;amp; Next JS&lt;/h2&gt;
      &lt;h3&gt;Srikant Sahoo ・ May 12&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#netlifychallenge&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devchallenge&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Discover App Concept - This article&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>netlifychallenge</category>
      <category>devchallenge</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Albums | Apple Vision👓 Concept App using Netlify's Blobs &amp; Next JS</title>
      <dc:creator>Srikant Sahoo</dc:creator>
      <pubDate>Sun, 12 May 2024 02:40:54 +0000</pubDate>
      <link>https://dev.to/srikant_code/albums-apple-vision-concept-app-using-netlifys-blobs-next-js-9ep</link>
      <guid>https://dev.to/srikant_code/albums-apple-vision-concept-app-using-netlifys-blobs-next-js-9ep</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/netlify"&gt;Netlify Dynamic Site Challenge&lt;/a&gt;: Build with Blobs.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;This project showcases three key features of Netlify, each feature is specifically demonstrated through a different application that I made:&lt;/p&gt;

&lt;p&gt;Link to Demo - &lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://apple-vision-concept-dynamic-site.netlify.app/" rel="noopener noreferrer"&gt;
      apple-vision-concept-dynamic-site.netlify.app
    &lt;/a&gt;
&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;Home page screenshot&lt;br&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%2Fwrkhyfddo0sbyvtflh3j.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%2Fwrkhyfddo0sbyvtflh3j.png" alt="Home page screenshot"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Link to all my submissions
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Memories App Concept - &lt;div class="ltag__link"&gt;
  &lt;a href="/srikant_code" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F240847%2Fe5c6d587-6243-4b72-9154-881e7a28b55d.png" alt="srikant_code"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/srikant_code/memories-apple-vision-concept-app-using-netlifys-image-cdn-1i0h" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Memories | Apple Vision👓 Concept App using Netlify's Image CDN &amp;amp; Next JS&lt;/h2&gt;
      &lt;h3&gt;Srikant Sahoo ・ May 12&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#netlifychallenge&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devchallenge&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Albums App Concept - This article&lt;/li&gt;
&lt;li&gt;Discover App Concept - &lt;div class="ltag__link"&gt;
  &lt;a href="/srikant_code" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F240847%2Fe5c6d587-6243-4b72-9154-881e7a28b55d.png" alt="srikant_code"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/srikant_code/discover-apple-vision-concept-app-using-netlifys-cache-revalidation-next-js-ssr-1ifj" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Discover | Apple Vision👓 Concept App using Netlify's Cache revalidation &amp;amp; Next JS SSR&lt;/h2&gt;
      &lt;h3&gt;Srikant Sahoo ・ May 12&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#netlifychallenge&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devchallenge&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  What I Built | Concept/Ideation
&lt;/h2&gt;

&lt;p&gt;Hey👋, I'm Srikant Sahoo. I'm excited to present this project for the &lt;code&gt;Netlify Dynamic Site Challenge&lt;/code&gt;. This project is a cutting-edge concept user interface designed for virtual reality devices, taking inspiration from futuristic concepts like &lt;code&gt;Apple Vision👓&lt;/code&gt; to showcase how Netlify's capabilities can be leveraged to create such applications in future for VR use cases. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Side note for your reference - More info on Apple Vision Pro &lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.apple.com/newsroom/2024/02/apple-announces-more-than-600-new-apps-built-for-apple-vision-pro/" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.apple.com%2Fnewsroom%2Fimages%2F2024%2F02%2Fapple-announces-more-than-600-new-apps-built-for-apple-vision-pro%2Ftile%2FApple-Vision-Pro-app-experiences-visionOS-home-lp.jpg.og.jpg%3F202410091804" height="auto" class="m-0"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.apple.com/newsroom/2024/02/apple-announces-more-than-600-new-apps-built-for-apple-vision-pro/" rel="noopener noreferrer" class="c-link"&gt;
          Apple announces more than 600 new apps built for Apple Vision Pro - Apple
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Apple today announced incredible new apps that will be available on Apple Vision Pro beginning Friday, February 2.
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
        apple.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Why I built this Apple Vision Concept?
&lt;/h2&gt;

&lt;p&gt;The major question that I had was...&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How can I use all the 3 themes in one project🤔? &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Even though I had this question, I still started with creating a &lt;code&gt;Image Gallery&lt;/code&gt; using Image CDN. But then later on during development I figured out that I can instead convert it into a small virtual app called &lt;code&gt;Memories App&lt;/code&gt; instead of &lt;code&gt;Gallery App or Photos App&lt;/code&gt;, and similarly create more virtual apps for the other 2 prompts. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;All Photos&lt;/code&gt; view&lt;br&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%2Fsd8gl5bkgno7j9fwl0uk.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%2Fsd8gl5bkgno7j9fwl0uk.png" alt="All photos view"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So, the first thing that came into my mind was to create a mock concept environment for &lt;code&gt;Apple Vision Pro👓&lt;/code&gt; where users can see and interact with the 3 apps while being sitting at the couch. Thats how I proceeded and build the UX and then eventually developed it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Three apps navigation&lt;br&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%2Fylcgtettzxn3rxr5mt6o.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%2Fylcgtettzxn3rxr5mt6o.png" alt="Three app navigation"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Platform Primitives
&lt;/h2&gt;

&lt;p&gt;Below are the details on how I leveraged the &lt;code&gt;Netlify Image CDN&lt;/code&gt;, &lt;code&gt;Netlify Blobs&lt;/code&gt; storage and &lt;code&gt;Netlify's Cache Revalidation&lt;/code&gt; in three different virtual apps.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Albums App
&lt;/h3&gt;

&lt;p&gt;This app utilizes &lt;code&gt;Netlify's Blobs&lt;/code&gt; storage to store your albums and its contents. Once you land on the page, you are automatically assigned a unique username (kind of a mock authentication). &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%2F4lh7x3xmggke9u2gpwr5.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%2F4lh7x3xmggke9u2gpwr5.png" alt="screen capture of albums app"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have written a clever and complex logic to handle the albums data in blobs. You can also see other users' albums from the &lt;code&gt;Other's Albums&lt;/code&gt; tab. &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%2Fx5ymnky896hbnltl5exv.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%2Fx5ymnky896hbnltl5exv.png" alt="albums 1"&gt;&lt;/a&gt;&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%2Fy86td6tfdnk31yw6xfvb.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%2Fy86td6tfdnk31yw6xfvb.png" alt="albums 2"&gt;&lt;/a&gt;&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%2F2cfdj447zhd2bgtr1r8i.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%2F2cfdj447zhd2bgtr1r8i.png" alt="albums 3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Challenges Faced while developing this &lt;code&gt;Albums&lt;/code&gt; App
&lt;/h4&gt;

&lt;p&gt;I faced a lot of challenges while implementing this. &lt;br&gt;
Initially the blobs were only working in the &lt;code&gt;netlify dev&lt;/code&gt; env and was not working when I was deploying it (which was making it harder to debug). It bugged me for days, I needed to go through all the related documentation to understand and fix it.&lt;/p&gt;

&lt;p&gt;But spending 1-2 days on consistent bug fixing and observing the patterns, I finally figured out the way to work with blobs. &lt;/p&gt;

&lt;p&gt;I also faced challenges on the below&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implementation of expiration logic of blobs to free up space.&lt;/li&gt;
&lt;li&gt;How to tackle multiple users updating the same blob&lt;/li&gt;
&lt;li&gt;How to refresh the UI between the Memories and Albums App when anything is updated.
&lt;/li&gt;
&lt;li&gt;How to setup and use the blobs without using edge functions and instead use the Netlify APIs directly using the &lt;code&gt;use server&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;And as mentioned above on deployment part&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Memories App
&lt;/h3&gt;

&lt;p&gt;This app leverages &lt;code&gt;Netlify's Image CDN&lt;/code&gt; capability to display photos in responsive way. You can toggle the below tabs to filter images by date category and see images in different sizes. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;Days&lt;/code&gt; view&lt;br&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%2Foobq9amxe7byktpr43f0.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%2Foobq9amxe7byktpr43f0.png" alt="Days view"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It queries the Image CDN to render the most optimized version for quick loading of the images in an animated way. You can click any photo to see in good resolution. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Fetches the most optimized image using queries like &lt;code&gt;&amp;amp;w=64&amp;amp;q=75&lt;/code&gt;&lt;br&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%2Ftwwxbztgzobuzr7nfce0.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%2Ftwwxbztgzobuzr7nfce0.png" alt="Fetches the most optimized image using queries like  raw `&amp;amp;w=64&amp;amp;q=75` endraw "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;UI on clicking any image&lt;br&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%2F7cnitf7co3fgttljbnt8.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%2F7cnitf7co3fgttljbnt8.png" alt="UI on clicking any image"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The Netlify's blob storage is used in the &lt;code&gt;Add photos to Albums&lt;/code&gt; button. It stores the opened photo to one of your Album (More on this below)&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%2Fvazoszbmnp3670b9c7o0.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%2Fvazoszbmnp3670b9c7o0.png" alt="add photos to albums"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Discover App
&lt;/h3&gt;

&lt;p&gt;This app uses &lt;code&gt;Netlify's Cache Revalidation&lt;/code&gt; feature to fetch the latest articles from the web (Wikipedia Random API) using Server-Side Rendering technique of Next JS). It highlights how Netlify's Cache Revalidation can ensure users always have access to the most recent information on demand.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Below code -&amp;gt; uses the Next cache headers and tagName to revalidate the cache&lt;br&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%2F2wn706pkuuy0ion6dxdv.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%2F2wn706pkuuy0ion6dxdv.png" alt="code image"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&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%2Fgn73q2mgmbooyjnlw2xa.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%2Fgn73q2mgmbooyjnlw2xa.png" alt="screenshot of discover app"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I was new to &lt;code&gt;Next JS SSR&lt;/code&gt;, so I was initially facing difficulties with the SSR logic, but figured out how to tackle it to render the UI having the wiki article.&lt;/p&gt;




&lt;h3&gt;
  
  
  Disclaimer
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Please note that this project is not associated with any organization and is purely a result of my passion and 💘 for technology and innovation, which I have done both the UX design and developed it in the last 5-6 days.&lt;/p&gt;

&lt;p&gt;All the assets, graphics, and icons used in this project have been duly referenced in the project itself for transparency, and you can find the sources in the &lt;code&gt;References&lt;/code&gt; section of the project. This project is a testament to my commitment to ethical practices in software development.&lt;br&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%2Fer9m9myhayztjqce2y1g.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%2Fer9m9myhayztjqce2y1g.png" alt="references inside another app"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This project is a hobby endeavor that I'm proud of, and I hope it helps you to understand the potential of Netlify's capabilities.&lt;/p&gt;

&lt;p&gt;It took me more than 5 days to build this. Would really appreciate if you liked it and can like this post (🦄,💘). It will motivate me to create more such kind of creative applications and use Netlify in my future projects😄.&lt;/p&gt;

&lt;p&gt;Thank you&lt;/p&gt;




&lt;h4&gt;
  
  
  Link to all my submissions
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Memories App Concept - &lt;div class="ltag__link"&gt;
  &lt;a href="/srikant_code" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F240847%2Fe5c6d587-6243-4b72-9154-881e7a28b55d.png" alt="srikant_code"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/srikant_code/memories-apple-vision-concept-app-using-netlifys-image-cdn-1i0h" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Memories | Apple Vision👓 Concept App using Netlify's Image CDN &amp;amp; Next JS&lt;/h2&gt;
      &lt;h3&gt;Srikant Sahoo ・ May 12&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#netlifychallenge&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devchallenge&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Albums App Concept - This article&lt;/li&gt;
&lt;li&gt;Discover App Concept - &lt;div class="ltag__link"&gt;
  &lt;a href="/srikant_code" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F240847%2Fe5c6d587-6243-4b72-9154-881e7a28b55d.png" alt="srikant_code"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/srikant_code/discover-apple-vision-concept-app-using-netlifys-cache-revalidation-next-js-ssr-1ifj" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Discover | Apple Vision👓 Concept App using Netlify's Cache revalidation &amp;amp; Next JS SSR&lt;/h2&gt;
      &lt;h3&gt;Srikant Sahoo ・ May 12&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#netlifychallenge&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devchallenge&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>netlifychallenge</category>
      <category>devchallenge</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Memories | Apple Vision👓 Concept App using Netlify's Image CDN &amp; Next JS</title>
      <dc:creator>Srikant Sahoo</dc:creator>
      <pubDate>Sun, 12 May 2024 02:19:38 +0000</pubDate>
      <link>https://dev.to/srikant_code/memories-apple-vision-concept-app-using-netlifys-image-cdn-1i0h</link>
      <guid>https://dev.to/srikant_code/memories-apple-vision-concept-app-using-netlifys-image-cdn-1i0h</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/netlify"&gt;Netlify Dynamic Site Challenge&lt;/a&gt;: Visual Feast.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;This project showcases three key features of Netlify, each feature is specifically demonstrated through a different application that I made:&lt;br&gt;
Link to Demo &lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://apple-vision-concept-dynamic-site.netlify.app/" rel="noopener noreferrer"&gt;
      apple-vision-concept-dynamic-site.netlify.app
    &lt;/a&gt;
&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;Home page screenshot&lt;br&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%2Fwrkhyfddo0sbyvtflh3j.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%2Fwrkhyfddo0sbyvtflh3j.png" alt="Home page screenshot" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Link to all my submissions
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Memories App Concept - This article&lt;/li&gt;
&lt;li&gt;Albums App Concept - &lt;div class="ltag__link"&gt;
  &lt;a href="/srikant_code" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hXDXPWFt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://media.dev.to/cdn-cgi/image/width%3D150%2Cheight%3D150%2Cfit%3Dcover%2Cgravity%3Dauto%2Cformat%3Dauto/https%253A%252F%252Fdev-to-uploads.s3.amazonaws.com%252Fuploads%252Fuser%252Fprofile_image%252F240847%252Fe5c6d587-6243-4b72-9154-881e7a28b55d.png" alt="srikant_code"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/srikant_code/albums-apple-vision-concept-app-using-netlifys-blobs-next-js-9ep" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Albums | Apple Vision👓 Concept App using Netlify's Blobs &amp;amp; Next JS&lt;/h2&gt;
      &lt;h3&gt;Srikant Sahoo ・ May 12&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#netlifychallenge&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devchallenge&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Discover App Concept - &lt;div class="ltag__link"&gt;
  &lt;a href="/srikant_code" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hXDXPWFt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://media.dev.to/cdn-cgi/image/width%3D150%2Cheight%3D150%2Cfit%3Dcover%2Cgravity%3Dauto%2Cformat%3Dauto/https%253A%252F%252Fdev-to-uploads.s3.amazonaws.com%252Fuploads%252Fuser%252Fprofile_image%252F240847%252Fe5c6d587-6243-4b72-9154-881e7a28b55d.png" alt="srikant_code"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/srikant_code/discover-apple-vision-concept-app-using-netlifys-cache-revalidation-next-js-ssr-1ifj" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Discover | Apple Vision👓 Concept App using Netlify's Cache revalidation &amp;amp; Next JS SSR&lt;/h2&gt;
      &lt;h3&gt;Srikant Sahoo ・ May 12&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#netlifychallenge&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devchallenge&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What I Built | Concept / Ideation
&lt;/h2&gt;

&lt;p&gt;Hey👋, I'm Srikant Sahoo. I'm excited to present this project for the &lt;code&gt;Netlify Dynamic Site Challenge&lt;/code&gt;. This project is a cutting-edge concept user interface designed for virtual reality devices, taking inspiration from futuristic concepts like &lt;code&gt;Apple Vision👓&lt;/code&gt; to showcase how Netlify's capabilities can be leveraged to create such applications in future for VR use cases. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Side note for your reference - More info on Apple Vision Pro &lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.apple.com/newsroom/2024/02/apple-announces-more-than-600-new-apps-built-for-apple-vision-pro/" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--fNMvfB24--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.apple.com/newsroom/images/2024/02/apple-announces-more-than-600-new-apps-built-for-apple-vision-pro/tile/Apple-Vision-Pro-app-experiences-visionOS-home-lp.jpg.og.jpg%3F202404111544" height="420" class="m-0" width="800"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.apple.com/newsroom/2024/02/apple-announces-more-than-600-new-apps-built-for-apple-vision-pro/" rel="noopener noreferrer" class="c-link"&gt;
          Apple announces more than 600 new apps built for Apple Vision Pro - Apple
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Apple today announced incredible new apps that will be available on Apple Vision Pro beginning Friday, February 2.
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
        apple.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Why I built this Apple Vision Concept?
&lt;/h2&gt;

&lt;p&gt;The major question that I had was...&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How can I use all the 3 themes in one project🤔? &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Even though I had this question, I still started with creating a &lt;code&gt;Image Gallery&lt;/code&gt; using Image CDN. But then later on during development I figured out that I can instead convert it into a small virtual app called &lt;code&gt;Memories App&lt;/code&gt; instead of &lt;code&gt;Gallery App or Photos App&lt;/code&gt;, and similarly create more virtual apps for the other 2 prompts. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;All Photos&lt;/code&gt; view&lt;br&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%2Fsd8gl5bkgno7j9fwl0uk.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%2Fsd8gl5bkgno7j9fwl0uk.png" alt="All photos view" width="800" height="503"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So, the first thing that came into my mind was to create a mock concept environment for &lt;code&gt;Apple Vision Pro👓&lt;/code&gt; where users can see and interact with the 3 apps while being sitting at the couch. Thats how I proceeded and build the UX and then eventually developed it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Three apps navigation&lt;br&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%2Fylcgtettzxn3rxr5mt6o.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%2Fylcgtettzxn3rxr5mt6o.png" alt="Three app navigation" width="421" height="138"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Platform Primitives
&lt;/h2&gt;

&lt;p&gt;Below are the details on how I leveraged the &lt;code&gt;Netlify Image CDN&lt;/code&gt;, &lt;code&gt;Netlify Blobs&lt;/code&gt; storage and &lt;code&gt;Netlify's Cache Revalidation&lt;/code&gt; in three different virtual apps.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Memories App
&lt;/h3&gt;

&lt;p&gt;This app leverages &lt;code&gt;Netlify's Image CDN&lt;/code&gt; capability to display photos in responsive way. You can toggle the below tabs to filter images by date category and see images in different sizes. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;Days&lt;/code&gt; view&lt;br&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%2Foobq9amxe7byktpr43f0.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%2Foobq9amxe7byktpr43f0.png" alt="Days view" width="800" height="498"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It queries the Image CDN to render the most optimized version for quick loading of the images in an animated way. You can click any photo to see in good resolution. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Fetches the most optimized image using queries like &lt;code&gt;&amp;amp;w=64&amp;amp;q=75&lt;/code&gt;&lt;br&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%2Ftwwxbztgzobuzr7nfce0.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%2Ftwwxbztgzobuzr7nfce0.png" alt="Fetches the most optimized image using queries like  raw `&amp;amp;w=64&amp;amp;q=75` endraw " width="657" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;UI on clicking any image&lt;br&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%2F7cnitf7co3fgttljbnt8.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%2F7cnitf7co3fgttljbnt8.png" alt="UI on clicking any image" width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The Netlify's blob storage is used in the &lt;code&gt;Add photos to Albums&lt;/code&gt; button. It stores the opened photo to one of your Album (More on this below)&lt;/p&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%2Fvazoszbmnp3670b9c7o0.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%2Fvazoszbmnp3670b9c7o0.png" alt="add photos to albums" width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Albums App
&lt;/h3&gt;

&lt;p&gt;This app utilizes &lt;code&gt;Netlify's Blobs&lt;/code&gt; storage to store your albums and its contents. Once you land on the page, you are automatically assigned a unique username (kind of a mock authentication). &lt;/p&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%2F4lh7x3xmggke9u2gpwr5.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%2F4lh7x3xmggke9u2gpwr5.png" alt="screen capture of albums app" width="800" height="493"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have written a clever and complex logic to handle the albums data in blobs. You can also see other users' albums from the &lt;code&gt;Other's Albums&lt;/code&gt; tab. &lt;/p&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%2Fx5ymnky896hbnltl5exv.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%2Fx5ymnky896hbnltl5exv.png" alt="albums 1" width="800" height="605"&gt;&lt;/a&gt;&lt;/p&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%2Fy86td6tfdnk31yw6xfvb.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%2Fy86td6tfdnk31yw6xfvb.png" alt="albums 2" width="649" height="183"&gt;&lt;/a&gt;&lt;/p&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%2F2cfdj447zhd2bgtr1r8i.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%2F2cfdj447zhd2bgtr1r8i.png" alt="albums 3" width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Challenges Faced while developing this &lt;code&gt;Albums&lt;/code&gt; App
&lt;/h4&gt;

&lt;p&gt;I faced a lot of challenges while implementing this. &lt;br&gt;
Initially the blobs were only working in the &lt;code&gt;netlify dev&lt;/code&gt; env and was not working when I was deploying it (which was making it harder to debug). It bugged me for days, I needed to go through all the related documentation to understand and fix it.&lt;/p&gt;

&lt;p&gt;But spending 1-2 days on consistent bug fixing and observing the patterns, I finally figured out the way to work with blobs. &lt;/p&gt;

&lt;p&gt;I also faced challenges on the below&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implementation of expiration logic of blobs to free up space.&lt;/li&gt;
&lt;li&gt;How to tackle multiple users updating the same blob&lt;/li&gt;
&lt;li&gt;How to refresh the UI between the Memories and Albums App when anything is updated.
&lt;/li&gt;
&lt;li&gt;How to setup and use the blobs without using edge functions and instead use the Netlify APIs directly using the &lt;code&gt;use server&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;And as mentioned above on deployment part&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Discover App
&lt;/h3&gt;

&lt;p&gt;This app uses &lt;code&gt;Netlify's Cache Revalidation&lt;/code&gt; feature to fetch the latest articles from the web (Wikipedia Random API) using Server-Side Rendering technique of Next JS). It highlights how Netlify's Cache Revalidation can ensure users always have access to the most recent information on demand.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Below code -&amp;gt; uses the Next cache headers and tagName to revalidate the cache&lt;br&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%2F2wn706pkuuy0ion6dxdv.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%2F2wn706pkuuy0ion6dxdv.png" alt="code image" width="458" height="208"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&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%2Fgn73q2mgmbooyjnlw2xa.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%2Fgn73q2mgmbooyjnlw2xa.png" alt="screenshot of discover app" width="800" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I was new to &lt;code&gt;Next JS SSR&lt;/code&gt;, so I was initially facing difficulties with the SSR logic, but figured out how to tackle it to render the UI having the wiki article.&lt;/p&gt;




&lt;h3&gt;
  
  
  Disclaimer
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Please note that this project is not associated with any organization and is purely a result of my passion and 💘 for technology and innovation, which I have done both the UX design and developed it in the last 5-6 days.&lt;/p&gt;

&lt;p&gt;All the assets, graphics, and icons used in this project have been duly referenced in the project itself for transparency, and you can find the sources in the &lt;code&gt;References&lt;/code&gt; section of the project. This project is a testament to my commitment to ethical practices in software development.&lt;br&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%2Fer9m9myhayztjqce2y1g.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%2Fer9m9myhayztjqce2y1g.png" alt="references inside another app" width="800" height="536"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This project is a hobby endeavor that I'm proud of, and I hope it helps you to understand the potential of Netlify's capabilities.&lt;/p&gt;

&lt;p&gt;It took me more than 5 days to build this. Would really appreciate if you liked it and can like this post (🦄,💘). It will motivate me to create more such kind of creative applications and use Netlify in my future projects😄.&lt;/p&gt;

&lt;p&gt;Thank you&lt;/p&gt;




&lt;h4&gt;
  
  
  Link to all my submissions
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Memories App Concept - This article&lt;/li&gt;
&lt;li&gt;Albums App Concept - &lt;div class="ltag__link"&gt;
  &lt;a href="/srikant_code" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hXDXPWFt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://media.dev.to/cdn-cgi/image/width%3D150%2Cheight%3D150%2Cfit%3Dcover%2Cgravity%3Dauto%2Cformat%3Dauto/https%253A%252F%252Fdev-to-uploads.s3.amazonaws.com%252Fuploads%252Fuser%252Fprofile_image%252F240847%252Fe5c6d587-6243-4b72-9154-881e7a28b55d.png" alt="srikant_code"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/srikant_code/albums-apple-vision-concept-app-using-netlifys-blobs-next-js-9ep" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Albums | Apple Vision👓 Concept App using Netlify's Blobs &amp;amp; Next JS&lt;/h2&gt;
      &lt;h3&gt;Srikant Sahoo ・ May 12&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#netlifychallenge&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devchallenge&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Discover App Concept - &lt;div class="ltag__link"&gt;
  &lt;a href="/srikant_code" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hXDXPWFt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://media.dev.to/cdn-cgi/image/width%3D150%2Cheight%3D150%2Cfit%3Dcover%2Cgravity%3Dauto%2Cformat%3Dauto/https%253A%252F%252Fdev-to-uploads.s3.amazonaws.com%252Fuploads%252Fuser%252Fprofile_image%252F240847%252Fe5c6d587-6243-4b72-9154-881e7a28b55d.png" alt="srikant_code"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/srikant_code/discover-apple-vision-concept-app-using-netlifys-cache-revalidation-next-js-ssr-1ifj" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Discover | Apple Vision👓 Concept App using Netlify's Cache revalidation &amp;amp; Next JS SSR&lt;/h2&gt;
      &lt;h3&gt;Srikant Sahoo ・ May 12&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#netlifychallenge&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devchallenge&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>netlifychallenge</category>
      <category>devchallenge</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Hello world</title>
      <dc:creator>Srikant Sahoo</dc:creator>
      <pubDate>Sun, 02 Aug 2020 03:27:44 +0000</pubDate>
      <link>https://dev.to/srikant_code/hello-world-1bhg</link>
      <guid>https://dev.to/srikant_code/hello-world-1bhg</guid>
      <description>&lt;p&gt;This is a test hello world post.&lt;br&gt;
Originally Posted on Aug 2, 2020&lt;/p&gt;

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