<?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: Anshul Negi</title>
    <description>The latest articles on DEV Community by Anshul Negi (@anshulnegitc).</description>
    <link>https://dev.to/anshulnegitc</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%2F292230%2F17190771-eb12-4969-94ad-dfd5e07fb020.jpg</url>
      <title>DEV Community: Anshul Negi</title>
      <link>https://dev.to/anshulnegitc</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/anshulnegitc"/>
    <language>en</language>
    <item>
      <title>I Built an AI-First Portfolio Powered by Gemini</title>
      <dc:creator>Anshul Negi</dc:creator>
      <pubDate>Fri, 30 Jan 2026 20:05:13 +0000</pubDate>
      <link>https://dev.to/anshulnegitc/i-built-an-ai-first-portfolio-powered-by-gemini-40jb</link>
      <guid>https://dev.to/anshulnegitc/i-built-an-ai-first-portfolio-powered-by-gemini-40jb</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/new-year-new-you-google-ai-2025-12-31"&gt;New Year, New You Portfolio Challenge Presented by Google AI&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  About Me
&lt;/h2&gt;

&lt;p&gt;I like building things that are simple, useful, and easy to understand.&lt;br&gt;
This portfolio replaces traditional navigation with conversation, letting you explore my work and approach through an AI-powered interface.&lt;/p&gt;
&lt;h2&gt;
  
  
  Portfolio
&lt;/h2&gt;

&lt;p&gt;Try it here → &lt;a href="https://ai-powered-portfolio-762827267923.us-west1.run.app" rel="noopener noreferrer"&gt;Live Demo&lt;/a&gt;&lt;br&gt;


&lt;/p&gt;
&lt;div class="ltag__cloud-run"&gt;
  &lt;iframe height="600px" src="https://ai-powered-portfolio-762827267923.us-west1.run.app"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;




&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Tech stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Angular&lt;/li&gt;
&lt;li&gt;TailWind CSS&lt;/li&gt;
&lt;li&gt;Gemini Flash Lite 2.5&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Design Decisions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Chose a conversational portfolio instead of a multi-page layout to highlight AI-driven interaction.&lt;/li&gt;
&lt;li&gt;Kept the UI simple and readable so users can focus on content without distractions.&lt;/li&gt;
&lt;li&gt;Added predefined prompts to help users get started easily.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Development Process
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Gathered all portfolio information and structured it as a single data source to enable context-based responses.&lt;/li&gt;
&lt;li&gt;Initially passed the entire portfolio data with each request, which led to unnecessary API usage and performance issues.&lt;/li&gt;
&lt;li&gt;Introduced AI-based intent detection to understand what the user is asking before selecting relevant data. This helped reduce context size but still required further optimization.&lt;/li&gt;
&lt;li&gt;Split the portfolio data into multiple focused sections (skills, projects, experience, philosophy) to improve clarity and reduce payload size.&lt;/li&gt;
&lt;li&gt;Switched to Gemini Flash Lite 2.5 for faster, more efficient intent detection and lightweight response generation.&lt;/li&gt;
&lt;li&gt;Defined fixed intents for predefined prompt pills to avoid unnecessary intent detection calls.&lt;/li&gt;
&lt;li&gt;Cached responses for prompts to minimize repeated API calls and improve responsiveness.&lt;/li&gt;
&lt;li&gt;Added a contextual follow-up question after responses to encourage deeper exploration without overwhelming the user.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Google AI tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Google AI Studio&lt;/li&gt;
&lt;li&gt;Gemini&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I'm Most Proud Of
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Used AI to rapidly build, iterate, and deploy the application, enabling fast experimentation and continuous refinement.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Applied intent-based AI usage with focused context and model selection to improve response quality while reducing unnecessary API calls.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Balanced user experience and technical implementation, ensuring the interface remains simple while the system stays efficient.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>googleaichallenge</category>
      <category>portfolio</category>
      <category>gemini</category>
    </item>
    <item>
      <title>Free Image Hosting</title>
      <dc:creator>Anshul Negi</dc:creator>
      <pubDate>Sun, 13 Oct 2024 16:07:22 +0000</pubDate>
      <link>https://dev.to/anshulnegitc/free-image-hosting-obi</link>
      <guid>https://dev.to/anshulnegitc/free-image-hosting-obi</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/pinata"&gt;The Pinata Challenge &lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Free Image Hosting is a web application that allows users to temporarily store and share image files. It utilizes Pinata for storage and retrieval, enabling optimized image retrieval. MongoDB is used to store image properties and URLs.&lt;/p&gt;

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

&lt;p&gt;Website : &lt;a href="https://fimh.vercel.app/" rel="noopener noreferrer"&gt;Live&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Website Overview
&lt;/h3&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%2F7g65tnn9q7r81tehqdt7.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%2F7g65tnn9q7r81tehqdt7.png" alt="Homepage" width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Configure Image
&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%2Fak9ih6vyb4c4hqxywlg5.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%2Fak9ih6vyb4c4hqxywlg5.png" alt="Edit Image Configuration" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Get Temporary Url
&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%2F7ozbwe8p7o5de9xwdo95.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%2F7ozbwe8p7o5de9xwdo95.png" alt="Temporary Url" width="800" height="82"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Getting Image by temporary Url
&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%2Fs30v8defd6f6zgkyqx12.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%2Fs30v8defd6f6zgkyqx12.png" alt="Image Preview" width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Url Expired/Image Not Found/Url Not Found
&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%2F2ubissmbkmv82rxsaxlt.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%2F2ubissmbkmv82rxsaxlt.png" alt="Url not found" width="800" height="257"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/anshulnegitc" rel="noopener noreferrer"&gt;
        anshulnegitc
      &lt;/a&gt; / &lt;a href="https://github.com/anshulnegitc/fimh" rel="noopener noreferrer"&gt;
        fimh
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Free Image Hosting&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Store and share file with temporary url.&lt;/p&gt;
&lt;p&gt;A Next.js-based application that uses &lt;strong&gt;&lt;a href="https://pinata.cloud/" rel="nofollow noopener noreferrer"&gt;Pinata&lt;/a&gt;&lt;/strong&gt;  to store image files and MongoDB to store data. Images can be configured with different properties for optimization. Documents are deleted using a TTL index in MongoDB, and triggers-functions in MongoDB remove the corresponding files from Pinata&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🚀 Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Seamless Image Upload&lt;/strong&gt;: File API to upload image.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Signed Url&lt;/strong&gt;: Signed Url to access image for limited amount of time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimized Performance&lt;/strong&gt;: Leverages Pinata's Image Opimization for fast content delivery and enhanced user experience.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📂 Tech Stack&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: React, Next.js&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: Next.js, Pinata API, MongoDb&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Styling&lt;/strong&gt;: Bootstrap&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosting&lt;/strong&gt;: Vercel&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;⚙️ Setup &amp;amp; Installation&lt;/h2&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Clone the Repository&lt;/strong&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;git clone https://github.com/anshulnegitc/fimh.git
&lt;span class="pl-c1"&gt;cd&lt;/span&gt; fimh&lt;/pre&gt;

&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install Dependencies:&lt;/strong&gt;:
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm install&lt;/pre&gt;

&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment Variables:&lt;/strong&gt; Set up environment variables for Pinata API keys in a &lt;code&gt;.env.local&lt;/code&gt; file(Place .env.local inside fimh folder):
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;NEXT_PUBLIC_PINATA_JWT=your_api_key
NEXT_PUBLIC_GATEWAY_URL=your_secret_key
NEXT_PUBLIC_DATABASE_URL=your_mongo_connection_url&lt;/pre&gt;

&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/anshulnegitc/fimh" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  More Details
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Pinata Files API&lt;/strong&gt; is used to upload the image.&lt;br&gt;
&lt;strong&gt;Pinata Signed URL&lt;/strong&gt; is used to access the image for a limited amount of time.&lt;br&gt;
&lt;strong&gt;Pinata Image Optimizations&lt;/strong&gt; can be set to improve the load time and experience when viewing image content.&lt;/p&gt;

&lt;p&gt;For project setup and other configuration &lt;a href="https://github.com/anshulnegitc/fimh" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>pinatachallenge</category>
      <category>webdev</category>
      <category>api</category>
    </item>
    <item>
      <title>Url Shortener</title>
      <dc:creator>Anshul Negi</dc:creator>
      <pubDate>Mon, 29 Aug 2022 17:42:00 +0000</pubDate>
      <link>https://dev.to/anshulnegitc/url-shortener-3907</link>
      <guid>https://dev.to/anshulnegitc/url-shortener-3907</guid>
      <description>&lt;h3&gt;
  
  
  Overview of My Submission
&lt;/h3&gt;

&lt;p&gt;It's an imitation of Url Shortener Service.&lt;/p&gt;

&lt;p&gt;Only functional requirements are considered while developing this project i.e to generate short url and redirect short url to original url.&lt;/p&gt;

&lt;p&gt;In case url got expired/moved to other domain/not responsding, a 404 error page is shown.&lt;/p&gt;

&lt;p&gt;Redis is used as primary as well as caching database here.&lt;/p&gt;

&lt;p&gt;Some analytics and expression values(like,star,thumbs up etc...) are permanently stored in database while urls are short lived.&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%2F4eaj7cnoog8ocy3fxsp4.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%2F4eaj7cnoog8ocy3fxsp4.png" alt="Home Page" width="800" height="450"&gt;&lt;/a&gt;&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%2F5da0tqunjdq9zfrm5uhx.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%2F5da0tqunjdq9zfrm5uhx.png" alt="404 Page" width="800" height="450"&gt;&lt;/a&gt;&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%2Fzj99itgyet65l7i3qwas.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%2Fzj99itgyet65l7i3qwas.png" alt="Analytics" width="800" height="450"&gt;&lt;/a&gt;&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%2Fjym2t9547e7wf1vqb6wr.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%2Fjym2t9547e7wf1vqb6wr.png" alt="Mobile Design" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Submission Category:
&lt;/h3&gt;

&lt;p&gt;MEAN/MERN Mavericks&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/YJlg9RTmKDM"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Language Used:
&lt;/h3&gt;

&lt;p&gt;NodeJs &amp;amp; React&lt;/p&gt;

&lt;h3&gt;
  
  
  Link to Code
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Frontend:
&lt;/h4&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/anshulnegitc" rel="noopener noreferrer"&gt;
        anshulnegitc
      &lt;/a&gt; / &lt;a href="https://github.com/anshulnegitc/url-shortener-app-frontend" rel="noopener noreferrer"&gt;
        url-shortener-app-frontend
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Url Shortener Application&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;It's an imitation of &lt;strong&gt;Url Shortener Service.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Only &lt;strong&gt;functional requirements&lt;/strong&gt; are considered while developing this project i.e &lt;strong&gt;to generate short url and redirect short url to original url.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In case url got expired/moved to other domain/not responsding, a 404 error page is shown.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Redis is used as primary as well as caching database here.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Some analytics and expression values(like,star,thumbs up etc...) are permanently stored in database while urls are short lived.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Application Architecture.&lt;/strong&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/55315115/187064974-93993fd0-2c64-4464-9e88-0912835b336e.jpg"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F55315115%2F187064974-93993fd0-2c64-4464-9e88-0912835b336e.jpg" alt="Application-Architrecture"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Desktop View.&lt;/strong&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/55315115/187065005-b5b86519-252b-4ebc-83c2-3340e887504d.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F55315115%2F187065005-b5b86519-252b-4ebc-83c2-3340e887504d.png" alt="Img-1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;404 Page.&lt;/strong&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/55315115/187065040-67708e7e-fe8d-4c7b-811b-e08408a8810c.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F55315115%2F187065040-67708e7e-fe8d-4c7b-811b-e08408a8810c.png" alt="Img-2"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Analytics.&lt;/strong&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/55315115/187065025-7f28fd3b-ac16-45f4-aee3-8600052f5c01.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F55315115%2F187065025-7f28fd3b-ac16-45f4-aee3-8600052f5c01.png" alt="Img-4"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mobile View.&lt;/strong&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/55315115/187065011-d359e042-abd4-404a-8e23-617a5a21b484.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F55315115%2F187065011-d359e042-abd4-404a-8e23-617a5a21b484.png" alt="Img-3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Overview video&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Here's a short video that explains the project and how it uses Redis:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://youtu.be/YJlg9RTmKDM" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F55315115%2F187065005-b5b86519-252b-4ebc-83c2-3340e887504d.png" alt="Url Shortener"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How it works&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;How the data is stored:&lt;/h3&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Urls.
&lt;ul&gt;
&lt;li&gt;It maps the long_url with short_url.&lt;/li&gt;
&lt;li&gt;short_url is base62 value of counter and is indexed.&lt;/li&gt;
&lt;li&gt;Expiration of 30 mins is set.&lt;/li&gt;
&lt;li&gt;Data is stored as&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;
&lt;pre class="notranslate"&gt;&lt;code&gt;class Url extends Entity { }
const urlSchema = new Schema(Url, {
    long_url: { type: 'string' }
    short_url:&lt;/code&gt;&lt;/pre&gt;…&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/anshulnegitc/url-shortener-app-frontend" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h4&gt;
  
  
  Backend:
&lt;/h4&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/anshulnegitc" rel="noopener noreferrer"&gt;
        anshulnegitc
      &lt;/a&gt; / &lt;a href="https://github.com/anshulnegitc/url-shortener-app-backend" rel="noopener noreferrer"&gt;
        url-shortener-app-backend
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Url Shortener Application&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;It's an imitation of &lt;strong&gt;Url Shortener Service.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Only &lt;strong&gt;functional requirements&lt;/strong&gt; are considered while developing this project i.e &lt;strong&gt;to generate short url and redirect short url to original url.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In case url got expired/moved to other domain/not responsding, a 404 error page is shown.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Redis is used as primary as well as caching database here.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Some analytics and expression values(like,star,thumbs up etc...) are permanently stored in database while urls are short lived.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Application Architecture.&lt;/strong&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/55315115/187064974-93993fd0-2c64-4464-9e88-0912835b336e.jpg"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F55315115%2F187064974-93993fd0-2c64-4464-9e88-0912835b336e.jpg" alt="Application-Architrecture"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Desktop View.&lt;/strong&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/55315115/187065005-b5b86519-252b-4ebc-83c2-3340e887504d.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F55315115%2F187065005-b5b86519-252b-4ebc-83c2-3340e887504d.png" alt="Img-1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;404 Page.&lt;/strong&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/55315115/187065040-67708e7e-fe8d-4c7b-811b-e08408a8810c.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F55315115%2F187065040-67708e7e-fe8d-4c7b-811b-e08408a8810c.png" alt="Img-2"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Analytics.&lt;/strong&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/55315115/187065025-7f28fd3b-ac16-45f4-aee3-8600052f5c01.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F55315115%2F187065025-7f28fd3b-ac16-45f4-aee3-8600052f5c01.png" alt="Img-4"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mobile View.&lt;/strong&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/55315115/187065011-d359e042-abd4-404a-8e23-617a5a21b484.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F55315115%2F187065011-d359e042-abd4-404a-8e23-617a5a21b484.png" alt="Img-3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Overview video&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Here's a short video that explains the project and how it uses Redis:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://youtu.be/YJlg9RTmKDM" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F55315115%2F187065005-b5b86519-252b-4ebc-83c2-3340e887504d.png" alt="Url Shortener"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How it works&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;How the data is stored:&lt;/h3&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Urls.
&lt;ul&gt;
&lt;li&gt;It maps the long_url with short_url.&lt;/li&gt;
&lt;li&gt;short_url is base62 value of counter and is indexed.&lt;/li&gt;
&lt;li&gt;Expiration of 30 mins is set.&lt;/li&gt;
&lt;li&gt;Data is stored as&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;
&lt;pre class="notranslate"&gt;&lt;code&gt;class Url extends Entity { }
const urlSchema = new Schema(Url, {
    long_url: { type: 'string' }
    short_url:&lt;/code&gt;&lt;/pre&gt;…&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/anshulnegitc/url-shortener-app-backend" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;





&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Check out &lt;a href="https://redis.io/docs/stack/get-started/clients/#high-level-client-libraries" rel="noopener noreferrer"&gt;Redis OM&lt;/a&gt;, client libraries for working with Redis as a multi-model database.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Use &lt;a href="https://redis.info/redisinsight" rel="noopener noreferrer"&gt;RedisInsight&lt;/a&gt; to visualize your data in Redis.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Sign up for a &lt;a href="https://redis.info/try-free-dev-to" rel="noopener noreferrer"&gt;free Redis database&lt;/a&gt;.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>redishackathon</category>
    </item>
    <item>
      <title>designing database</title>
      <dc:creator>Anshul Negi</dc:creator>
      <pubDate>Mon, 16 Mar 2020 07:15:54 +0000</pubDate>
      <link>https://dev.to/anshulnegitc/designing-database-1knm</link>
      <guid>https://dev.to/anshulnegitc/designing-database-1knm</guid>
      <description>&lt;p&gt;I am new to database architecture though familiar with queries and aggregation in MongoDB.&lt;br&gt;
At present working on a project where I have to store different user depending upon the type/role. There are few fields similar in the user model, would it be correct to create a separate collection for each role or just create separate schema then reference it i.e only a single collection.&lt;br&gt;
In the future, more roles can be added with more information.&lt;br&gt;
Any other approach is welcome.&lt;/p&gt;

&lt;p&gt;Below is the mock models&lt;br&gt;
Eg:&lt;br&gt;
*customer = &lt;br&gt;
{firstname,lastname,email,address,mobileno,password,role}&lt;br&gt;
*sales = {firstname,lastname,email,address,mobileno,password,role,attachments,experience,&lt;br&gt;
education}&lt;br&gt;
*marketting = &lt;br&gt;
{teamName,email,address,mobileno,password,role,members,attachments}&lt;/p&gt;

</description>
      <category>mongodb</category>
      <category>database</category>
      <category>help</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
