[
  {
    "path": ".gitattributes",
    "content": "# Auto detect text files and perform LF normalization\n* text=auto\n"
  },
  {
    "path": ".gitignore",
    "content": "*.mp3\nnode_modules"
  },
  {
    "path": "README.md",
    "content": "# Welcome to Sigma's Web Development Course - Hindi Web Development Tutorials! 🚀\n\n## What's Inside:\n\nIf you've been itching to dive into the world of web development but feel lost in a sea of English tutorials, you're in the right place! Our course is exclusively in Hindi and is crafted to guide you from being an absolute beginner to a seasoned pro, one step at a time.\n\n## Who Can Benefit?\n\n### This course is a perfect fit for:\n\n1. Beginners eager to start their web development journey\n2. Intermediate developers looking to refine their skills\n3. Individuals who prefer learning in Hindi\n\n## What You'll Master:\n\n### During this course, you'll delve into:\n\n1. The fundamentals of HTML, CSS, and JavaScript\n2. Both front-end and back-end development\n3. How to seamlessly integrate databases\n4. Real-world project implementation\n5. And a whole lot more!\n\n## The Schedule:\n\nWe're committed to your growth. Expect fresh source code additions nearly every day. Keep up the pace with our schedule and watch your skills soar! 📅\n\nGet ready to embark on an exciting coding journey! 👨‍💻🌟\n\nReady to start? [Click here](https://www.youtube.com/playlist?list=PLu0W_9lII9agq5TrH9XLIKQvv0iaF2X3w) to access the complete YouTube playlist.\n"
  },
  {
    "path": "Video 01/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n<body>\n    <video src=\"video4.mp4\" controls></video>\n</body>\n</html>"
  },
  {
    "path": "Video 01/this.txt",
    "content": "this is thisth8is"
  },
  {
    "path": "Video 02/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Sigma Web Development Course</title>\n  \n</head>\n<body>\n    Hey this is my first website. Sigma Harry bhai ka course achha hai.\n    and ye sigma course hai\n\n</body>\n</html>"
  },
  {
    "path": "Video 02/script.js",
    "content": "alert(\"Welcome to Sigma Web Development Course\")"
  },
  {
    "path": "Video 02/style.css",
    "content": "body{\n    background-color: red;\n    color: white;\n}"
  },
  {
    "path": "Video 03/.vscode/settings.json",
    "content": "{\n    \"livePreview.portNumber\": 3000,\n    \"livePreview.hostIP\": \"192.168.1.199\",\n    \"liveServer.settings.useLocalIp\": true,\n    \"liveServer.settings.host\": \"192.168.1.199\",\n    \"livePreview.defaultPreviewPath\": \"/index.html\"\n}"
  },
  {
    "path": "Video 03/index.html",
    "content": "<!DOCTYPE html>\n\n\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta name=\"description\" content=\"\">\n    <title>title of the page</title>\n    <link rel=\"stylesheet\" href=\"style.css\">\n</head>\n\n<body>\n    content\n\n</body>\n\n</html>"
  },
  {
    "path": "Video 03/script.js",
    "content": "alert(\"Hello\")"
  },
  {
    "path": "Video 03/style.css",
    "content": "body{\n    background-color: red;\n}"
  },
  {
    "path": "Video 04/bookmarkmanager.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Bookmark Manager - CodeWithHarry</title>\n</head>\n<body>\n    <h1>My Bookmarks - CodeWithHarry</h1>\n    <h2>Primary Bookmarks</h2>\n    <p><a target=\"_blank\" href=\"https://www.google.com\">Open Google</a></p>\n    <p><a target=\"_blank\" href=\"https://www.facebook.com\">Open Facebook</a></p>\n    <p><a target=\"_blank\" href=\"https://www.quora.com\">Open Quora</a></p>\n    <p><a target=\"_blank\" href=\"https://www.codewithharry.com\">Open CodeWithHarry</a></p>\n    <p><a target=\"_blank\" href=\"https://www.youtube.com\">Open YouTube</a></p>\n    \n    <h2>Secondary Bookmarks</h2>\n    <p><a target=\"_blank\" href=\"https://www.wikipedia.com\">Open Wikipedia</a></p>\n    <p><a target=\"_blank\" href=\"https://www.stackoverflow.com\">Open Stackoverflow</a></p>\n</body>\n</html>"
  },
  {
    "path": "Video 04/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>My Bookmarks - CodeWithHarry</title>\n    <!-- <link rel=\"stylesheet\" href=\"style.css\"> -->\n</head>\n<body>\n    <h1>My Bookmarks - CodeWithHarry using h1</h1>\n    <h2>Main Bookmarks - CodeWithHarry using h2</h2>  \n    <h3>Main Bookmarks - CodeWithHarry using h3</h3>  \n    <h4>Main Bookmarks - CodeWithHarry using h4</h4>  \n    <h5>Main Bookmarks - CodeWithHarry using h5</h5>  \n    <h6>Main Bookmarks - CodeWithHarry using h6</h6> \n    \n    <p style=\"background-color: thistle;\">Lorem ipsum, dolor sit amet consectetur adipisicing elit. Officia hic cupiditate maxime, quaerat, iusto nobis porro fuga harum aut laboriosam ab quos animi?</p>\n    <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Odit totam maiores, necessitatibus sed nam illum quas, possimus debitis recusandae sunt repellendus, unde officiis corrupti obcaecati aliquam ratione eum voluptates eius. Exercitationem distinctio possimus voluptas? Voluptate laborum autem libero non laudantium a incidunt maiores quas reiciendis illum, beatae quasi hic provident mollitia optio quisquam quod suscipit atque rem! Pariatur excepturi, quo incidunt atque enim reiciendis ullam, voluptatibus laborum quos quas autem, nam a eum eligendi maxime sit deleniti eveniet ea non commodi. Similique laboriosam quos, natus doloribus, excepturi adipisci tenetur, nihil id unde deserunt cupiditate explicabo saepe beatae animi hic et?</p>\n</body>\n</html>"
  },
  {
    "path": "Video 04/script.js",
    "content": ""
  },
  {
    "path": "Video 04/style.css",
    "content": "body{\n    background-color: rgb(239, 206, 223);\n}"
  },
  {
    "path": "Video 05/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Images</title>\n    <link rel=\"stylesheet\" href=\"style.css\">\n</head>\n\n<body>\n    <img height=\"230\" src=\"image.png\" alt=\"Train image\">\n    <br>\n    <table>\n        <caption>Employee Details</caption>\n        <thead>\n            <tr>\n                <th>Name</th>\n                <th>Designation</th>\n                <th>Fav Language</th>\n            </tr>\n        </thead>\n        <tbody>\n\n\n            <tr>\n                <td>Harry</td>\n                <td>Programmer</td>\n                <td>JavaScript</td>\n            </tr>\n\n            <tr>\n                <td colspan=\"2\">Sam</td>\n                <td rowspan=\"2\">Java</td>\n            </tr>\n            <tr>\n                <td colspan=\"2\">Sam</td>\n            </tr>\n        </tbody>\n        <tfoot>\n            <tr>\n                <td colspan=\"2\">Sam</td>\n                <td rowspan=\"2\">foot</td>\n            </tr>\n        </tfoot>\n    </table>\n\n\n    <ul type=\"square\">\n        <li>Harry</li>\n        <li>Rohan</li>\n        <li>Shubham</li>\n    </ul>\n    <ol type=\"A\">\n        <li>Harry</li>\n        <li>Rohan</li>\n        <li>Shubham</li>\n    </ol>\n\n</body>\n\n</html>"
  },
  {
    "path": "Video 05/style.css",
    "content": "td{\n    border: 2px solid black;\n}"
  },
  {
    "path": "Video 06/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta name=\"description\" content=\"This is a page which contains description about harry - the sigma\"> \n    <title>About Harry - CodeWithHarry</title>\n</head>\n<body>\n    <h1>Harry</h1>\n    <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Ducimus, inventore laboriosam? Libero qui, a illo laborum, in aspernatur maxime temporibus quibusdam ullam quia obcaecati culpa iste est odit, voluptate quis explicabo reprehenderit. Autem cum totam laudantium possimus ipsam. Ut voluptates consectetur perferendis amet velit odit.</p>\n</body>\n</html>"
  },
  {
    "path": "Video 07/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Forms - Lets learn it</title>\n</head>\n\n<body>\n    <h1>Form to apply for Sigma Web Development course - TA </h1>\n    <form action=\"post\">\n        <div>\n            <label for=\"username\">Enter your Username</label>\n            <input type=\"text\" id=\"username\" name=\"username\" placeholder=\"Enter your username\" autofocus>\n        </div>\n        <div>\n            <input type=\"radio\" id=\"male\" name=\"gender\" value=\"male\">\n            <label for=\"male\">Male</label>\n            <input type=\"radio\" id=\"female\" name=\"gender\" value=\"female\">\n            <label for=\"female\">Female</label>\n        </div>\n\n        <div>\n            <input type=\"checkbox\" id=\"subscribe\" name=\"subscribe\" value=\"yes\">\n            <label for=\"subscribe\">Subscribe to newsletter</label>\n        </div>\n        <div>\n            <label for=\"comment\">Enter your comment</label>\n            <br>\n            <textarea id=\"comment\" name=\"comment\" rows=\"4\" cols=\"50\"></textarea>\n        </div>\n\n        <div>\n            <select name=\"fruits\">\n                <option value=\"apple\">Apple</option>\n                <option value=\"banana\">Banana</option>\n                <option value=\"cherry\">Cherry</option>\n          </select>\n        </div>\n    </form>\n</body>\n\n</html>"
  },
  {
    "path": "Video 08/Comprehensive List.txt",
    "content": "Block Elements (Most Commonly Used First)\n\n<div>: A generic container for flow content.\n<p>: Paragraph.\n<h1>, <h2>, <h3>, <h4>, <h5>, <h6>: Headings.\n<ul>: Unordered list.\n<ol>: Ordered list.\n<li>: List item.\n<form>: A section containing form controls.\n<table>: Table.\n<section>: A standalone section of a document.\n<header>: A container for introductory content or a set of navigational links.\n<footer>: Footer of a section or page.\n<nav>: A section of a page that contains navigation links.\n<article>: A self-contained composition in a document.\n<aside>: A section of a page that contains information indirectly related to the main content.\n<main>: The main content of a document.\n<fieldset>: A set of form controls grouped under a common name.\n<blockquote>: A block of text that is a quotation from another source.\n<pre>: Preformatted text.\n<canvas>: A container used to draw graphics via JavaScript.\n<dl>: Description list.\n<dt>: Term in a description list.\n<dd>: Description in a description list.\n<figure>: Any content that is referenced from the main content.\n<figcaption>: A caption for a <figure> element.\n<address>: Contact information for the author or owner of the document.\n<hr>: A thematic break or a horizontal rule.\n<tfoot>: Footer of a table.\n\n\n\nInline Elements (Most Commonly Used First)\n<a>: Anchor or hyperlink.\n<img>: Image.\n<span>: Generic inline container.\n<input>: Input field.\n<label>: Label for a form element.\n<strong>: Strong emphasis.\n<em>: Emphasized text.\n<br>: Line break.\n<code>: Code snippet.\n<b>: Bold text.\n<i>: Italic text.\n<u>: Underlined text.\n<small>: Smaller text.\n<sub>: Subscript.\n<sup>: Superscript.\n<mark>: Marked or highlighted text.\n<q>: Short inline quotation.\n<cite>: Citation.\n<kbd>: Keyboard input.\n<samp>: Sample output.\n<var>: Variable in a mathematical expression or programming context.\n<time>: Time.\n<abbr>: Abbreviation.\n<data>: Machine-readable translation of content.\n<acronym>: Acronym (Not supported in HTML5)."
  },
  {
    "path": "Video 08/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Inline and Block Elements - HTML</title>\n    <link rel=\"stylesheet\" href=\"style.css\">\n</head>\n\n<body>\n    <p>Hey I am a para</p>\n    <a href=\"https://google.com\">Google</a>\n    <div> I am a block element</div>\n    <span>I am span and I am inline</span>\n    <a href=\"\">yes he is inline</a>\n\n    <!-- Quick Quiz:\n    Without using br tag, write a vertically aligned form asking for name, city and pincode of a user.\n    Everyone must comment -->\n\n</body>\n\n</html>"
  },
  {
    "path": "Video 08/style.css",
    "content": "p{\n    background-color: aquamarine;\n}\n\na{\n    background-color: rgb(242, 160, 122);\n}\n\ndiv{\n    background-color: yellow;\n}\n\nspan{\n    background-color: rgb(198, 165, 230);\n}"
  },
  {
    "path": "Video 09/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>ID and Classes in HTML</title>\n    <link rel=\"stylesheet\" href=\"style.css\">\n</head>\n<body>\n    <div id=\"firstdiv\" class=\"red bg-yellow\">First</div>\n    <div id=\"seconddiv\">Second</div>\n    <span class=\"red\"></span>\n</body>\n</html>"
  },
  {
    "path": "Video 09/style.css",
    "content": ".red{\n color: red;\n}\n\n.bg-yellow{\n    background-color: yellow;\n}\n\n#firstdiv{\n    /* background-color: red; */\n}"
  },
  {
    "path": "Video 10/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n<body>\n    <video src=\"video.mp4\" height=\"255\" controls loop muted poster=\"download.jpg\"></video>\n\n    <audio src=\"sachin.mp3\" controls autoplay loop muted></audio>\n\n    <svg height=\"100\" width=\"100\">\n        <circle cx=\"50\" cy=\"50\" r=\"40\" stroke=\"black\" stroke-width=\"3\" fill=\"red\" />\n    </svg>\n    <img src=\"img.svg\" alt=\"My Svg Image\">\n\n    <!-- <iframe src=\"https://www.codewithharry.com/tutorial/html-iframes/\" width=\"322\" height=\"444\"></iframe> -->\n    \n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/tVzUXW6siu0?si=NuQZuYqrMHn7Pg-i&amp;start=739\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen></iframe>\n\n    <!-- Quick Quiz  -->\n    <!-- Create a website which shows videos of different category and audios of different categories.\n    You can use YouTube videos in an iframe using YouTube's embedding feature -->\n</body>\n</html>"
  },
  {
    "path": "Video 100/index.html",
    "content": "<!-- Design layout.png using node.js and tailwind css -->"
  },
  {
    "path": "Video 101/css/input.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities; "
  },
  {
    "path": "Video 101/css/output.css",
    "content": "/*\n! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com\n*/\n\n/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n  box-sizing: border-box;\n  /* 1 */\n  border-width: 0;\n  /* 2 */\n  border-style: solid;\n  /* 2 */\n  border-color: #e5e7eb;\n  /* 2 */\n}\n\n::before,\n::after {\n  --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n7. Disable tap highlights on iOS\n*/\n\nhtml,\n:host {\n  line-height: 1.5;\n  /* 1 */\n  -webkit-text-size-adjust: 100%;\n  /* 2 */\n  -moz-tab-size: 4;\n  /* 3 */\n  -o-tab-size: 4;\n     tab-size: 4;\n  /* 3 */\n  font-family: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  /* 4 */\n  font-feature-settings: normal;\n  /* 5 */\n  font-variation-settings: normal;\n  /* 6 */\n  -webkit-tap-highlight-color: transparent;\n  /* 7 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n  margin: 0;\n  /* 1 */\n  line-height: inherit;\n  /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n  height: 0;\n  /* 1 */\n  color: inherit;\n  /* 2 */\n  border-top-width: 1px;\n  /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n  -webkit-text-decoration: underline dotted;\n          text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  font-size: inherit;\n  font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n  color: inherit;\n  text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font-family by default.\n2. Use the user's configured `mono` font-feature-settings by default.\n3. Use the user's configured `mono` font-variation-settings by default.\n4. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  /* 1 */\n  font-feature-settings: normal;\n  /* 2 */\n  font-variation-settings: normal;\n  /* 3 */\n  font-size: 1em;\n  /* 4 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n  font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n  text-indent: 0;\n  /* 1 */\n  border-color: inherit;\n  /* 2 */\n  border-collapse: collapse;\n  /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font-family: inherit;\n  /* 1 */\n  font-feature-settings: inherit;\n  /* 1 */\n  font-variation-settings: inherit;\n  /* 1 */\n  font-size: 100%;\n  /* 1 */\n  font-weight: inherit;\n  /* 1 */\n  line-height: inherit;\n  /* 1 */\n  color: inherit;\n  /* 1 */\n  margin: 0;\n  /* 2 */\n  padding: 0;\n  /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n  -webkit-appearance: button;\n  /* 1 */\n  background-color: transparent;\n  /* 2 */\n  background-image: none;\n  /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n  outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n  box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n  vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n  -webkit-appearance: textfield;\n  /* 1 */\n  outline-offset: -2px;\n  /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button;\n  /* 1 */\n  font: inherit;\n  /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n  display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n  margin: 0;\n}\n\nfieldset {\n  margin: 0;\n  padding: 0;\n}\n\nlegend {\n  padding: 0;\n}\n\nol,\nul,\nmenu {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\n\ndialog {\n  padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n  resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n  opacity: 1;\n  /* 1 */\n  color: #9ca3af;\n  /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n  opacity: 1;\n  /* 1 */\n  color: #9ca3af;\n  /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n  cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n\n:disabled {\n  cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n   This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n  display: block;\n  /* 1 */\n  vertical-align: middle;\n  /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n  max-width: 100%;\n  height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n\n[hidden] {\n  display: none;\n}\n\n*, ::before, ::after {\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-gradient-from-position:  ;\n  --tw-gradient-via-position:  ;\n  --tw-gradient-to-position:  ;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n}\n\n::backdrop {\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-gradient-from-position:  ;\n  --tw-gradient-via-position:  ;\n  --tw-gradient-to-position:  ;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n}\n\n.absolute {\n  position: absolute;\n}\n\n.relative {\n  position: relative;\n}\n\n.sticky {\n  position: sticky;\n}\n\n.bottom-0 {\n  bottom: 0px;\n}\n\n.left-\\[19\\%\\] {\n  left: 19%;\n}\n\n.top-0 {\n  top: 0px;\n}\n\n.top-\\[50vh\\] {\n  top: 50vh;\n}\n\n.top-\\[100vh\\] {\n  top: 100vh;\n}\n\n.top-\\[70vh\\] {\n  top: 70vh;\n}\n\n.top-\\[90vh\\] {\n  top: 90vh;\n}\n\n.top-\\[80vh\\] {\n  top: 80vh;\n}\n\n.top-\\[84vh\\] {\n  top: 84vh;\n}\n\n.z-10 {\n  z-index: 10;\n}\n\n.m-2 {\n  margin: 0.5rem;\n}\n\n.m-3 {\n  margin: 0.75rem;\n}\n\n.m-4 {\n  margin: 1rem;\n}\n\n.m-auto {\n  margin: auto;\n}\n\n.mx-2 {\n  margin-left: 0.5rem;\n  margin-right: 0.5rem;\n}\n\n.mx-4 {\n  margin-left: 1rem;\n  margin-right: 1rem;\n}\n\n.mx-auto {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n.my-2 {\n  margin-top: 0.5rem;\n  margin-bottom: 0.5rem;\n}\n\n.my-3 {\n  margin-top: 0.75rem;\n  margin-bottom: 0.75rem;\n}\n\n.my-4 {\n  margin-top: 1rem;\n  margin-bottom: 1rem;\n}\n\n.my-5 {\n  margin-top: 1.25rem;\n  margin-bottom: 1.25rem;\n}\n\n.my-0 {\n  margin-top: 0px;\n  margin-bottom: 0px;\n}\n\n.mx-5 {\n  margin-left: 1.25rem;\n  margin-right: 1.25rem;\n}\n\n.mx-7 {\n  margin-left: 1.75rem;\n  margin-right: 1.75rem;\n}\n\n.mx-10 {\n  margin-left: 2.5rem;\n  margin-right: 2.5rem;\n}\n\n.ml-0 {\n  margin-left: 0px;\n}\n\n.mr-4 {\n  margin-right: 1rem;\n}\n\n.mt-6 {\n  margin-top: 1.5rem;\n}\n\n.mt-60 {\n  margin-top: 15rem;\n}\n\n.mt-2 {\n  margin-top: 0.5rem;\n}\n\n.mt-24 {\n  margin-top: 6rem;\n}\n\n.mt-10 {\n  margin-top: 2.5rem;\n}\n\n.mr-2 {\n  margin-right: 0.5rem;\n}\n\n.flex {\n  display: flex;\n}\n\n.hidden {\n  display: none;\n}\n\n.h-1 {\n  height: 0.25rem;\n}\n\n.h-7 {\n  height: 1.75rem;\n}\n\n.h-\\[0\\.2px\\] {\n  height: 0.2px;\n}\n\n.h-\\[1px\\] {\n  height: 1px;\n}\n\n.h-6 {\n  height: 1.5rem;\n}\n\n.h-16 {\n  height: 4rem;\n}\n\n.h-12 {\n  height: 3rem;\n}\n\n.w-1\\/2 {\n  width: 50%;\n}\n\n.w-16 {\n  width: 4rem;\n}\n\n.w-8 {\n  width: 2rem;\n}\n\n.w-\\[90\\%\\] {\n  width: 90%;\n}\n\n.w-full {\n  width: 100%;\n}\n\n.w-6 {\n  width: 1.5rem;\n}\n\n.w-12 {\n  width: 3rem;\n}\n\n.w-fit {\n  width: -moz-fit-content;\n  width: fit-content;\n}\n\n.cursor-pointer {\n  cursor: pointer;\n}\n\n.flex-col {\n  flex-direction: column;\n}\n\n.items-center {\n  align-items: center;\n}\n\n.justify-end {\n  justify-content: flex-end;\n}\n\n.justify-center {\n  justify-content: center;\n}\n\n.justify-between {\n  justify-content: space-between;\n}\n\n.gap-1 {\n  gap: 0.25rem;\n}\n\n.gap-2 {\n  gap: 0.5rem;\n}\n\n.gap-3 {\n  gap: 0.75rem;\n}\n\n.gap-4 {\n  gap: 1rem;\n}\n\n.gap-5 {\n  gap: 1.25rem;\n}\n\n.space-y-3 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-y-reverse: 0;\n  margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));\n  margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));\n}\n\n.space-y-4 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-y-reverse: 0;\n  margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));\n  margin-bottom: calc(1rem * var(--tw-space-y-reverse));\n}\n\n.space-y-1 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-y-reverse: 0;\n  margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));\n  margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));\n}\n\n.self-start {\n  align-self: flex-start;\n}\n\n.rounded-full {\n  border-radius: 9999px;\n}\n\n.rounded-xl {\n  border-radius: 0.75rem;\n}\n\n.border-\\[1px\\] {\n  border-width: 1px;\n}\n\n.border-x-0 {\n  border-left-width: 0px;\n  border-right-width: 0px;\n}\n\n.border-x-gray-600 {\n  --tw-border-opacity: 1;\n  border-left-color: rgb(75 85 99 / var(--tw-border-opacity));\n  border-right-color: rgb(75 85 99 / var(--tw-border-opacity));\n}\n\n.border-y-black {\n  --tw-border-opacity: 1;\n  border-top-color: rgb(0 0 0 / var(--tw-border-opacity));\n  border-bottom-color: rgb(0 0 0 / var(--tw-border-opacity));\n}\n\n.border-y-gray-600 {\n  --tw-border-opacity: 1;\n  border-top-color: rgb(75 85 99 / var(--tw-border-opacity));\n  border-bottom-color: rgb(75 85 99 / var(--tw-border-opacity));\n}\n\n.bg-\\[\\#16181c\\] {\n  --tw-bg-opacity: 1;\n  background-color: rgb(22 24 28 / var(--tw-bg-opacity));\n}\n\n.bg-\\[\\#1d9bf0\\] {\n  --tw-bg-opacity: 1;\n  background-color: rgb(29 155 240 / var(--tw-bg-opacity));\n}\n\n.bg-black {\n  --tw-bg-opacity: 1;\n  background-color: rgb(0 0 0 / var(--tw-bg-opacity));\n}\n\n.bg-blue-500 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(59 130 246 / var(--tw-bg-opacity));\n}\n\n.bg-gray-700 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(55 65 81 / var(--tw-bg-opacity));\n}\n\n.bg-white {\n  --tw-bg-opacity: 1;\n  background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n\n.bg-red-400 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(248 113 113 / var(--tw-bg-opacity));\n}\n\n.bg-red-50 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(254 242 242 / var(--tw-bg-opacity));\n}\n\n.bg-gray-900 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(17 24 39 / var(--tw-bg-opacity));\n}\n\n.p-1 {\n  padding: 0.25rem;\n}\n\n.p-3 {\n  padding: 0.75rem;\n}\n\n.p-4 {\n  padding: 1rem;\n}\n\n.px-20 {\n  padding-left: 5rem;\n  padding-right: 5rem;\n}\n\n.px-3 {\n  padding-left: 0.75rem;\n  padding-right: 0.75rem;\n}\n\n.px-4 {\n  padding-left: 1rem;\n  padding-right: 1rem;\n}\n\n.px-5 {\n  padding-left: 1.25rem;\n  padding-right: 1.25rem;\n}\n\n.py-2 {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.py-3 {\n  padding-top: 0.75rem;\n  padding-bottom: 0.75rem;\n}\n\n.py-5 {\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n}\n\n.px-8 {\n  padding-left: 2rem;\n  padding-right: 2rem;\n}\n\n.py-1 {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n}\n\n.px-6 {\n  padding-left: 1.5rem;\n  padding-right: 1.5rem;\n}\n\n.px-1 {\n  padding-left: 0.25rem;\n  padding-right: 0.25rem;\n}\n\n.px-2 {\n  padding-left: 0.5rem;\n  padding-right: 0.5rem;\n}\n\n.text-center {\n  text-align: center;\n}\n\n.text-2xl {\n  font-size: 1.5rem;\n  line-height: 2rem;\n}\n\n.text-3xl {\n  font-size: 1.875rem;\n  line-height: 2.25rem;\n}\n\n.text-lg {\n  font-size: 1.125rem;\n  line-height: 1.75rem;\n}\n\n.text-sm {\n  font-size: 0.875rem;\n  line-height: 1.25rem;\n}\n\n.text-xl {\n  font-size: 1.25rem;\n  line-height: 1.75rem;\n}\n\n.text-xs {\n  font-size: 0.75rem;\n  line-height: 1rem;\n}\n\n.font-bold {\n  font-weight: 700;\n}\n\n.text-blue-400 {\n  --tw-text-opacity: 1;\n  color: rgb(96 165 250 / var(--tw-text-opacity));\n}\n\n.text-blue-600 {\n  --tw-text-opacity: 1;\n  color: rgb(37 99 235 / var(--tw-text-opacity));\n}\n\n.text-gray-200 {\n  --tw-text-opacity: 1;\n  color: rgb(229 231 235 / var(--tw-text-opacity));\n}\n\n.text-gray-500 {\n  --tw-text-opacity: 1;\n  color: rgb(107 114 128 / var(--tw-text-opacity));\n}\n\n.text-gray-600 {\n  --tw-text-opacity: 1;\n  color: rgb(75 85 99 / var(--tw-text-opacity));\n}\n\n.text-white {\n  --tw-text-opacity: 1;\n  color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n\n.text-black {\n  --tw-text-opacity: 1;\n  color: rgb(0 0 0 / var(--tw-text-opacity));\n}\n\n.underline {\n  text-decoration-line: underline;\n}\n\n.opacity-15 {\n  opacity: 0.15;\n}\n\n.opacity-20 {\n  opacity: 0.2;\n}\n\n.opacity-70 {\n  opacity: 0.7;\n}\n\n.opacity-80 {\n  opacity: 0.8;\n}\n\n.outline-none {\n  outline: 2px solid transparent;\n  outline-offset: 2px;\n}\n\n.invert {\n  --tw-invert: invert(100%);\n  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n\n.backdrop-blur-lg {\n  --tw-backdrop-blur: blur(16px);\n  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n          backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n\n.backdrop-blur-xl {\n  --tw-backdrop-blur: blur(24px);\n  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n          backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n\n.backdrop-blur-2xl {\n  --tw-backdrop-blur: blur(40px);\n  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n          backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n\n.backdrop-blur-3xl {\n  --tw-backdrop-blur: blur(64px);\n  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n          backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n\n@media (min-width: 768px) {\n  .md\\:container {\n    width: 100%;\n  }\n\n  @media (min-width: 640px) {\n    .md\\:container {\n      max-width: 640px;\n    }\n  }\n\n  @media (min-width: 768px) {\n    .md\\:container {\n      max-width: 768px;\n    }\n  }\n\n  @media (min-width: 1024px) {\n    .md\\:container {\n      max-width: 1024px;\n    }\n  }\n\n  @media (min-width: 1280px) {\n    .md\\:container {\n      max-width: 1280px;\n    }\n  }\n\n  @media (min-width: 1536px) {\n    .md\\:container {\n      max-width: 1536px;\n    }\n  }\n}\n\n.hover\\:cursor-pointer:hover {\n  cursor: pointer;\n}\n\n.hover\\:rounded-full:hover {\n  border-radius: 9999px;\n}\n\n.hover\\:bg-gray-800:hover {\n  --tw-bg-opacity: 1;\n  background-color: rgb(31 41 55 / var(--tw-bg-opacity));\n}\n\n.hover\\:bg-gray-900:hover {\n  --tw-bg-opacity: 1;\n  background-color: rgb(17 24 39 / var(--tw-bg-opacity));\n}\n\n.hover\\:text-blue-500:hover {\n  --tw-text-opacity: 1;\n  color: rgb(59 130 246 / var(--tw-text-opacity));\n}\n\n.hover\\:text-green-500:hover {\n  --tw-text-opacity: 1;\n  color: rgb(34 197 94 / var(--tw-text-opacity));\n}\n\n.hover\\:text-pink-500:hover {\n  --tw-text-opacity: 1;\n  color: rgb(236 72 153 / var(--tw-text-opacity));\n}\n\n.hover\\:underline:hover {\n  text-decoration-line: underline;\n}\n\n@media (min-width: 768px) {\n  .md\\:mx-16 {\n    margin-left: 4rem;\n    margin-right: 4rem;\n  }\n\n  .md\\:block {\n    display: block;\n  }\n\n  .md\\:flex {\n    display: flex;\n  }\n\n  .md\\:hidden {\n    display: none;\n  }\n\n  .md\\:w-\\[70\\%\\] {\n    width: 70%;\n  }\n\n  .md\\:w-fit {\n    width: -moz-fit-content;\n    width: fit-content;\n  }\n\n  .md\\:items-end {\n    align-items: flex-end;\n  }\n\n  .md\\:justify-start {\n    justify-content: flex-start;\n  }\n\n  .md\\:px-11 {\n    padding-left: 2.75rem;\n    padding-right: 2.75rem;\n  }\n\n  .md\\:px-4 {\n    padding-left: 1rem;\n    padding-right: 1rem;\n  }\n\n  .md\\:py-3 {\n    padding-top: 0.75rem;\n    padding-bottom: 0.75rem;\n  }\n} "
  },
  {
    "path": "Video 101/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Home/X</title>\n    <link rel=\"shortcut icon\" href=\"https://abs.twimg.com/favicons/twitter-pip.3.ico\">\n    <link rel=\"stylesheet\"\n        href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\" />\n    <link rel=\"stylesheet\" href=\"./css/output.css\">\n</head>\n\n<body class=\" bg-black text-white\">\n    <div class=\"flex md:container mx-auto my-4\">\n        <div class=\"first w-16 md:w-[70%]\">\n\n            <div class=\"sidebar flex md:items-end  flex-col sticky top-0\">\n                <div class=\"logo invert my-4 self-start mx-2 md:mx-16\">\n\n                    <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"\n                        class=\"w-8 m-auto r-4qtqp9 r-yyyyoo r-dnmrzs r-bnwqim r-1plcrui r-lrvibr r-lrsllp r-1nao33i r-16y2uox r-8kz0gk\">\n                        <g>\n                            <path\n                                d=\"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z\">\n                            </path>\n                        </g>\n                    </svg>\n\n                </div>\n                <ul class=\"flex flex-col text-2xl space-y-3 md:px-11 font-bold w-full  \">\n                    <li\n                        class=\"flex md:justify-start items-center gap-3 justify-center  mr-4 md:w-fit  hover:bg-gray-900 hover:cursor-pointer px-5 py-3 hover:rounded-full\">\n                        <span class=\"text-3xl material-symbols-outlined\"> home </span> <span\n                            class=\"hidden md:block\">Home</span>\n                    </li>\n                    <li\n                        class=\"flex md:justify-start items-center gap-3 justify-center  mr-4 md:w-fit  hover:bg-gray-900 hover:cursor-pointer px-5 py-3 hover:rounded-full\">\n                        <span class=\"text-3xl material-symbols-outlined\"> search </span><span\n                            class=\"hidden md:block\">Explore</span>\n                    </li>\n                    <li\n                        class=\"flex md:justify-start items-center gap-3 justify-center  mr-4 md:w-fit  hover:bg-gray-900 hover:cursor-pointer px-5 py-3 hover:rounded-full\">\n                        <span class=\"text-3xl material-symbols-outlined\"> notifications </span><span\n                            class=\"hidden md:block\">Notifications</span>\n                    </li>\n                    <li\n                        class=\"flex md:justify-start items-center gap-3 justify-center  mr-4 md:w-fit  hover:bg-gray-900 hover:cursor-pointer px-5 py-3 hover:rounded-full\">\n                        <span class=\"text-3xl material-symbols-outlined\"> message </span><span\n                            class=\"hidden md:block\">Grok</span>\n                    </li>\n                    <li\n                        class=\"flex md:justify-start items-center gap-3 justify-center  mr-4 md:w-fit  hover:bg-gray-900 hover:cursor-pointer px-5 py-3 hover:rounded-full\">\n                        <span class=\"text-3xl material-symbols-outlined\"> lists </span><span\n                            class=\"hidden md:block\">Lists</span>\n                    </li>\n                    <li\n                        class=\"flex md:justify-start items-center gap-3 justify-center  mr-4 md:w-fit  hover:bg-gray-900 hover:cursor-pointer px-5 py-3 hover:rounded-full\">\n                        <span class=\"text-3xl material-symbols-outlined\"> bookmarks </span><span\n                            class=\"hidden md:block\">Bookmarks</span>\n                    </li>\n                    <li\n                        class=\"flex md:justify-start items-center gap-3 justify-center  mr-4 md:w-fit  hover:bg-gray-900 hover:cursor-pointer px-5 py-3 hover:rounded-full\">\n                        <span class=\"text-3xl material-symbols-outlined\"> Group </span><span\n                            class=\"hidden md:block\">Communities</span>\n                    </li>\n                    <li\n                        class=\"flex md:justify-start items-center gap-3 justify-center  mr-4 md:w-fit  hover:bg-gray-900 hover:cursor-pointer px-5 py-3 hover:rounded-full\">\n                        <span class=\"text-3xl material-symbols-outlined\"> box </span><span\n                            class=\"hidden md:block\">Premium</span>\n                    </li>\n                    <li\n                        class=\"flex md:justify-start items-center gap-3 justify-center  mr-4 md:w-fit  hover:bg-gray-900 hover:cursor-pointer px-5 py-3 hover:rounded-full\">\n                        <span class=\"text-3xl material-symbols-outlined\"> person </span><span\n                            class=\"hidden md:block\">Profile</span>\n                    </li>\n                    <li\n                        class=\"flex md:justify-start items-center gap-3 justify-center  mr-4 md:w-fit  hover:bg-gray-900 hover:cursor-pointer px-5 py-3 hover:rounded-full\">\n                        <span class=\"text-3xl material-symbols-outlined\"> pending </span><span\n                            class=\"hidden md:block\">More</span>\n                    </li>\n                    <li>\n                        <div class=\"button w-full text-center my-4\">\n                            <button\n                                class=\"hidden md:block bg-[#1d9bf0] px-20 text-xl rounded-full py-3 text-white\">Post</button>\n                            <button class=\"md:hidden bg-[#1d9bf0]  px-2 md:px-4 text-xl rounded-full py-1 md:py-3 text-white\">\n                                <span class=\"material-symbols-outlined\">\n                                    edit\n                                </span>\n                            </button>\n                        </div>\n                    </li>\n                </ul>\n\n                <div class=\"userprofile w-full mt-10  justify-end mx-10 hidden md:flex\">\n                    <div\n                        class=\"item p-3 items-center gap-5 justify-end mx-5 flex   hover:bg-gray-800 cursor-pointer rounded-full w-fit\">\n\n                        <div class=\"p1\"><img class=\"w-12 h-12\"\n                                src=\"https://pbs.twimg.com/profile_images/1522060025854066688/IZs_lylH_bigger.png\"\n                                alt=\"vercel\"></div>\n                        <div class=\"p2 \">\n                            <div>Haris Ali Khan</div>\n                            <div class=\"text-gray-500\">@CodeWithHarry</div>\n                        </div>\n\n                        <div class=\"p3 text-2xl\">\n                            ...\n                        </div>\n\n\n                    </div>\n                </div>\n\n            </div>\n\n\n        </div>\n        <div class=\"second w-full border-[1px] border-x-gray-600 border-y-black \">\n            <div class=\"top flex p-3 sticky top-0 bg-black backdrop-blur-3xl opacity-80\">\n                <div class=\"absolute w-16 h-1 rounded-full bg-blue-500 bottom-0 left-[19%] z-10\"></div>\n                <div class=\"left bg-red-3001 w-1/2 flex justify-center font-bold text-lg\">For You</div>\n                <div class=\"right bg-green-3001 w-1/2 flex justify-center font-bold text-lg\">Following</div>\n                <div class=\"settings mx-2\"><span class=\"material-symbols-outlined\">\n                        settings\n                    </span></div>\n            </div>\n            <div class=\"h-[1px] w-full bg-gray-700\"></div>\n            <div class=\"whatishapp flex gap-4 my-3\">\n                <div class=\"img m-2 w-16\">\n\n                    <img src=\"https://pbs.twimg.com/profile_images/1522060025854066688/IZs_lylH_bigger.png\" alt=\"\">\n                </div>\n                <div class=\"w-full\">\n                    <input class=\"w-full h-7 my-2 text-xl bg-black outline-none text-white\" type=\"text\"\n                        placeholder=\"What is happening?!\">\n                    <div class=\"text-blue-400 flex items-center gap-1 w-full my-4\">\n                        <span class=\"material-symbols-outlined \">\n                            globe_asia\n                        </span>\n                        <span class=\"font-bold\">Everyone can reply</span>\n                    </div>\n                    <div class=\"w-[90%] h-[0.2px] bg-gray-700 my-3\"></div>\n                    <div class=\"flex justify-between\">\n\n                        <div class=\"blueicons flex gap-2 text-blue-400 items-center\">\n                            <span class=\"material-symbols-outlined cursor-pointer\">\n                                image\n                            </span>\n                            <span class=\"material-symbols-outlined cursor-pointer\">\n                                gif\n                            </span>\n                            <span class=\"material-symbols-outlined cursor-pointer\">\n                                ballot\n                            </span>\n                            <span class=\"material-symbols-outlined cursor-pointer\">\n                                sentiment_satisfied\n                            </span>\n                            <span class=\"material-symbols-outlined cursor-pointer\">\n                                calendar_month\n                            </span>\n                            <span class=\"material-symbols-outlined cursor-pointer\">\n                                pin_drop\n                            </span>\n                        </div>\n                        <div class=\"postbtn\">\n                            <button\n                                class=\"bg-[#1d9bf0] px-6 mx-5 text-sm rounded-full py-2 text-white font-bold\">Post</button>\n                        </div>\n\n                    </div>\n                </div>\n\n            </div>\n\n\n            <div class=\"posts\">\n                <div class=\"post border-[1px] border-y-gray-600 border-x-0  \">\n                    <div class=\"flex\">\n                        <div class=\"image m-4\">\n                            <img class=\"w-16\"\n                                src=\"https://pbs.twimg.com/profile_images/1697299503198646273/GTnwCVUC_x96.jpg\" alt=\"\">\n                        </div>\n                        <div class=\"content my-3\">\n                            <span class=\"font-bold hover:underline cursor-pointer text-white\">Elon Musk</span> <span\n                                class=\"text-gray-500\">@ElonMusk · 6h </span>\n                            <div class=\"postimg m-2 ml-0\"> I spent $44 billion for this app and now Lizard boy just\n                                decided to hit copy and paste.\n\n                                It’s personal now.\n\n                                See you in the cage, Zuck.\n                            </div>\n                            <div class=\"icons flex justify-between mx-4 my-4 text-sm text-gray-600\">\n                                <div\n                                    class=\"icon flex items-center justify-center hover:text-blue-500 hover:bg-gray-900 hover:rounded-full p-1 hover:cursor-pointer\">\n                                    <span class=\"material-symbols-outlined\">\n                                        chat_bubble\n                                    </span> 1k\n                                </div>\n                                <div\n                                    class=\"icon flex items-center justify-center hover:text-green-500 hover:bg-gray-900 hover:rounded-full p-1 hover:cursor-pointer\">\n                                    <span class=\"material-symbols-outlined\">\n                                        repeat\n                                    </span> 1k\n                                </div>\n                                <div\n                                    class=\"icon flex items-center justify-center hover:text-pink-500 hover:bg-gray-900 hover:rounded-full p-1 hover:cursor-pointer\">\n                                    <span class=\"material-symbols-outlined\">\n                                        Favorite\n                                    </span> 1k\n                                </div>\n                                <div\n                                    class=\"icon flex items-center justify-center hover:text-blue-500 hover:bg-gray-900 hover:rounded-full p-1 hover:cursor-pointer\">\n                                    <span class=\"material-symbols-outlined\">\n                                        bar_chart\n                                    </span> 1k\n                                </div>\n\n                            </div>\n                        </div>\n                    </div>\n\n                </div>\n\n                <div class=\"post\">\n                    <div class=\"flex\">\n                        <div class=\"image m-4\">\n                            <img class=\"w-16\"\n                                src=\"https://pbs.twimg.com/profile_images/1522060025854066688/IZs_lylH_bigger.png\"\n                                alt=\"\">\n                        </div>\n                        <div class=\"content my-3\">\n                            <span class=\"font-bold hover:underline cursor-pointer text-white\">CodeWithHarry</span> <span\n                                class=\"text-gray-500\">@CodeWithHarry · 6h </span>\n                            <div>Living legend</div>\n                            <div class=\"postimg m-4 ml-0\">\n                                <img class=\"rounded-xl\"\n                                    src=\"https://pbs.twimg.com/media/GEGqnodacAAoyCO?format=jpg&name=900x900\" alt=\"\">\n                            </div>\n                            <div class=\"icons flex justify-between mx-4 my-4 text-sm text-gray-600\">\n                                <div\n                                    class=\"icon flex items-center justify-center hover:text-blue-500 hover:bg-gray-900 hover:rounded-full p-1 hover:cursor-pointer\">\n                                    <span class=\"material-symbols-outlined\">\n                                        chat_bubble\n                                    </span> 1k\n                                </div>\n                                <div\n                                    class=\"icon flex items-center justify-center hover:text-green-500 hover:bg-gray-900 hover:rounded-full p-1 hover:cursor-pointer\">\n                                    <span class=\"material-symbols-outlined\">\n                                        repeat\n                                    </span> 1k\n                                </div>\n                                <div\n                                    class=\"icon flex items-center justify-center hover:text-pink-500 hover:bg-gray-900 hover:rounded-full p-1 hover:cursor-pointer\">\n                                    <span class=\"material-symbols-outlined\">\n                                        Favorite\n                                    </span> 1k\n                                </div>\n                                <div\n                                    class=\"icon flex items-center justify-center hover:text-blue-500 hover:bg-gray-900 hover:rounded-full p-1 hover:cursor-pointer\">\n                                    <span class=\"material-symbols-outlined\">\n                                        bar_chart\n                                    </span> 1k\n                                </div>\n\n                            </div>\n                        </div>\n                    </div>\n\n                </div>\n                <div class=\"post\">\n                    <div class=\"flex\">\n                        <div class=\"image m-4\">\n                            <img class=\"w-8\"\n                                src=\"https://pbs.twimg.com/profile_images/1724504100136439808/J8k8HnSD_bigger.png\"\n                                alt=\"\">\n                        </div>\n                        <div class=\"content my-3\">\n                            <span class=\"font-bold hover:underline cursor-pointer text-white\"> non aesthetic\n                                things</span> <span class=\"text-gray-500\">@CodeMeme · 6h </span>\n                            <div>This is amazing coding meme</div>\n                            <div class=\"postimg m-4 ml-0\">\n                                <img class=\"rounded-xl w-full\"\n                                    src=\"https://s3.amazonaws.com/rails-camp-tutorials/blog/programming+memes/works-doesnt-work.jpg\"\n                                    alt=\"\">\n                            </div>\n                            <div class=\"icons flex justify-between mx-4 my-4 text-sm text-gray-600\">\n                                <div\n                                    class=\"icon flex items-center justify-center hover:text-blue-500 hover:bg-gray-900 hover:rounded-full p-1 hover:cursor-pointer\">\n                                    <span class=\"material-symbols-outlined\">\n                                        chat_bubble\n                                    </span> 1k\n                                </div>\n                                <div\n                                    class=\"icon flex items-center justify-center hover:text-green-500 hover:bg-gray-900 hover:rounded-full p-1 hover:cursor-pointer\">\n                                    <span class=\"material-symbols-outlined\">\n                                        repeat\n                                    </span> 1k\n                                </div>\n                                <div\n                                    class=\"icon flex items-center justify-center hover:text-pink-500 hover:bg-gray-900 hover:rounded-full p-1 hover:cursor-pointer\">\n                                    <span class=\"material-symbols-outlined\">\n                                        Favorite\n                                    </span> 1k\n                                </div>\n                                <div\n                                    class=\"icon flex items-center justify-center hover:text-blue-500 hover:bg-gray-900 hover:rounded-full p-1 hover:cursor-pointer\">\n                                    <span class=\"material-symbols-outlined\">\n                                        bar_chart\n                                    </span> 1k\n                                </div>\n\n                            </div>\n                        </div>\n                    </div>\n\n                </div>\n                <div class=\"post\">\n                    <div class=\"flex\">\n                        <div class=\"image m-4\">\n                            <img class=\"w-16\"\n                                src=\"https://pbs.twimg.com/profile_images/1522060025854066688/IZs_lylH_bigger.png\"\n                                alt=\"\">\n                        </div>\n                        <div class=\"content my-3\">\n                            <span class=\"font-bold hover:underline cursor-pointer text-white\"> non aesthetic\n                                things</span> <span class=\"text-gray-500\">@PicturesFoIder · 6h </span>\n                            <div>legend</div>\n                            <div class=\"postimg m-4 ml-0\">\n                                <img class=\"rounded-xl\"\n                                    src=\"https://pbs.twimg.com/media/GEGqnodacAAoyCO?format=jpg&name=900x900\" alt=\"\">\n                            </div>\n                            <div class=\"icons flex justify-between mx-4 my-4 text-sm text-gray-600\">\n                                <div\n                                    class=\"icon flex items-center justify-center hover:text-blue-500 hover:bg-gray-900 hover:rounded-full p-1 hover:cursor-pointer\">\n                                    <span class=\"material-symbols-outlined\">\n                                        chat_bubble\n                                    </span> 1k\n                                </div>\n                                <div\n                                    class=\"icon flex items-center justify-center hover:text-green-500 hover:bg-gray-900 hover:rounded-full p-1 hover:cursor-pointer\">\n                                    <span class=\"material-symbols-outlined\">\n                                        repeat\n                                    </span> 1k\n                                </div>\n                                <div\n                                    class=\"icon flex items-center justify-center hover:text-pink-500 hover:bg-gray-900 hover:rounded-full p-1 hover:cursor-pointer\">\n                                    <span class=\"material-symbols-outlined\">\n                                        Favorite\n                                    </span> 1k\n                                </div>\n                                <div\n                                    class=\"icon flex items-center justify-center hover:text-blue-500 hover:bg-gray-900 hover:rounded-full p-1 hover:cursor-pointer\">\n                                    <span class=\"material-symbols-outlined\">\n                                        bar_chart\n                                    </span> 1k\n                                </div>\n\n                            </div>\n                        </div>\n                    </div>\n\n                </div>\n            </div>\n        </div>\n        <div class=\"third w-full bg-red-5044 hidden md:block\">\n\n            <div class=\"search m-3\">\n                <input type=\"text\" class=\"w-1/2 rounded-full bg-[#16181c] text-white px-4 py-2\" placeholder=\"Search\">\n            </div>\n\n            <div class=\"whats sticky top-0 m-3 bg-[#16181c] w-1/2 py-5 rounded-xl space-y-3\">\n                <h1 class=\"text-xl font-bold px-3\">Whats Happening</h1>\n                <div class=\"item p-3 hover:bg-gray-800 cursor-pointer px-3\">\n                    <div class=\"text-sm text-gray-200\">Trending in India</div>\n                    <div class=\"font-bold\">#Orry</div>\n                    <div class=\"text-sm text-gray-200\">40.2k Posts</div>\n                </div>\n\n                <div class=\"item p-3 hover:bg-gray-800 cursor-pointer px-3\">\n                    <div class=\"text-sm text-gray-200\">Trending in India</div>\n                    <div class=\"font-bold\">#Harry</div>\n                    <div class=\"text-sm text-gray-200\">40.2k Posts</div>\n                </div>\n\n                <div class=\"item p-3 hover:bg-gray-800 cursor-pointer px-3\">\n                    <div class=\"text-sm text-gray-200\">Trending in India</div>\n                    <div class=\"font-bold\">#Sigma Course</div>\n                    <div class=\"text-sm text-gray-200\">40.2k Posts</div>\n                </div>\n\n                <div class=\"item p-3 hover:bg-gray-800 cursor-pointer px-3\">\n                    <div class=\"text-sm text-gray-200\">Trending in India</div>\n                    <div class=\"font-bold\">#CodeWithHarry</div>\n                    <div class=\"text-sm text-gray-200\">40.2k Posts</div>\n                </div>\n            </div>\n\n\n            <div class=\"who sticky top-[50vh] m-3 bg-[#16181c] w-1/2 py-5 rounded-xl space-y-1\">\n                <h1 class=\"text-xl font-bold px-3\">Who To Follow</h1>\n\n\n                <div class=\"item p-3 items-center gap-2 flex justify-between hover:bg-gray-800 cursor-pointer\">\n                    <div class=\"flex gap-3\">\n\n                        <div class=\"p1\"><img class=\"w-12 h-12\"\n                                src=\"https://pbs.twimg.com/profile_images/1652878800311427073/j0-3owJd_bigger.jpg\"\n                                alt=\"vercel\"></div>\n                        <div class=\"p2 \">\n                            <div>Vercel</div>\n                            <div class=\"text-gray-500\">@vercel</div>\n                        </div>\n                    </div>\n\n                    <div class=\"p3\">\n                        <button class=\"bg-white text-black px-5 py-2 rounded-full font-bold\">Follow</button>\n                    </div>\n\n                </div>\n                <div class=\"item p-3 items-center gap-2 flex justify-between hover:bg-gray-800 cursor-pointer\">\n                    <div class=\"flex gap-3\">\n\n                        <div class=\"p1\"><img class=\"w-12 h-12\"\n                                src=\"https://pbs.twimg.com/profile_images/446356636710363136/OYIaJ1KK_bigger.png\"\n                                alt=\"vercel\"></div>\n                        <div class=\"p2 \">\n                            <div>React</div>\n                            <div class=\"text-gray-500\">@react</div>\n                        </div>\n                    </div>\n\n                    <div class=\"p3\">\n                        <button class=\"bg-white text-black px-5 py-2 rounded-full font-bold\">Follow</button>\n                    </div>\n\n                </div>\n                <div class=\"item p-3 items-center gap-2 flex justify-between hover:bg-gray-800 cursor-pointer\">\n                    <div class=\"flex gap-3\">\n\n                        <div class=\"p1\"><img class=\"w-12 h-12\"\n                                src=\"https://pbs.twimg.com/profile_images/989513875124117504/UNMIb20k_bigger.jpg\"\n                                alt=\"vercel\"></div>\n                        <div class=\"p2 \">\n                            <div>Shad.js</div>\n                            <div class=\"text-gray-500\">@shad</div>\n                        </div>\n                    </div>\n\n                    <div class=\"p3\">\n                        <button class=\"bg-white text-black px-5 py-2 rounded-full font-bold\">Follow</button>\n                    </div>\n\n                </div>\n                <div class=\"text-blue-600 px-3 cursor-pointer hover:underline my-5\">Show More</div>\n            </div>\n\n            <div class=\"terms sticky top-[84vh] m-3 text-xs text-gray-500 px-3  w-1/2 py-5   space-y-1\">\n                <span class=\"hover:underline cursor-pointer mr-2\">Terms of Service</span>\n                <span class=\"hover:underline cursor-pointer mr-2\">Privacy Policy</span>\n                <span class=\"hover:underline cursor-pointer mr-2\">Cookie Policy</span>\n                <span class=\"hover:underline cursor-pointer mr-2\">Accessibility</span>\n                <span class=\"hover:underline cursor-pointer mr-2\">Ads info</span>\n                <span class=\"hover:underline cursor-pointer mr-2\">More</span>\n                <span class=\"hover:underline cursor-pointer mr-2\">© 2024 X Corp.</span>\n            </div>\n        </div>\n    </div>\n</body>\n\n</html>"
  },
  {
    "path": "Video 101/package.json",
    "content": "{\n  \"name\": \"video-101\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\",\n    \"build\": \"npx tailwindcss -i ./css/input.css -o ./css/output.css --watch\",\n    \"dev\": \"vite\" \n  },\n  \"keywords\": [],\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"devDependencies\": {\n    \"tailwindcss\": \"^3.4.1\"\n  },\n  \"dependencies\": {\n    \"vite\": \"^5.0.11\"\n  }\n}\n"
  },
  {
    "path": "Video 101/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\"*html\"],\n  theme: {\n    extend: {},\n  },\n  plugins: [],\n}\n\n"
  },
  {
    "path": "Video 102/index.html",
    "content": "<!-- Design layout.png using node.js and tailwind css -->\n<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n    <link rel=\"stylesheet\" href=\"src/output.css\">\n</head>\n\n<body class=\"bg-black text-white\">\n    <nav class=\"flex bg-slate-950 text-white py-4\">\n        <ul class=\"flex gap-4\">\n            <li>Home</li>\n            <li>About</li>\n            <li>Contact</li>\n        </ul>\n    </nav>\n\n    <main>\n        <div class=\"container mx-auto my-6\">\n            <div class=\"card flex\">\n                <div class=\"img\">\n                    <img src=\"https://i.ytimg.com/vi/tVzUXW6siu0/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLACwWOixJVrKLFindK92kYMgTcQbw\"\n                        alt=\"\">\n                </div>\n                <div class=\"text flex flex-col\">\n                    <h1 class=\"font-bold text-2xl mx-4\">Installing VS Code & How websites work | Sigma Web dev course #1\n                    </h1>\n                    <div class=\"text-lg my-4 mx-4 text-gray-400\"> CodeWithHarry • 297K views • 3 months ago</div>\n                </div>\n            </div>\n        </div>\n    </main>\n</body>\n\n</html>"
  },
  {
    "path": "Video 102/package.json",
    "content": "{\n  \"name\": \"design-the-layout\",\n  \"version\": \"1.0.0\",\n  \"description\": \"This is the solution for sigma exercise number 17\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\",\n    \"dev\": \"vite\"\n  },\n  \"keywords\": [\n    \"cwh\",\n    \"sigma\",\n    \"javascript\",\n    \"tailwind\"\n  ],\n  \"author\": \"Harry\",\n  \"license\": \"ISC\",\n  \"devDependencies\": {\n    \"tailwindcss\": \"^3.4.1\"\n  },\n  \"dependencies\": {\n    \"vite\": \"^5.0.12\"\n  }\n}\n"
  },
  {
    "path": "Video 102/src/input.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;"
  },
  {
    "path": "Video 102/src/output.css",
    "content": "/*\n! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com\n*/\n\n/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n  box-sizing: border-box;\n  /* 1 */\n  border-width: 0;\n  /* 2 */\n  border-style: solid;\n  /* 2 */\n  border-color: #e5e7eb;\n  /* 2 */\n}\n\n::before,\n::after {\n  --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n7. Disable tap highlights on iOS\n*/\n\nhtml,\n:host {\n  line-height: 1.5;\n  /* 1 */\n  -webkit-text-size-adjust: 100%;\n  /* 2 */\n  -moz-tab-size: 4;\n  /* 3 */\n  -o-tab-size: 4;\n     tab-size: 4;\n  /* 3 */\n  font-family: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  /* 4 */\n  font-feature-settings: normal;\n  /* 5 */\n  font-variation-settings: normal;\n  /* 6 */\n  -webkit-tap-highlight-color: transparent;\n  /* 7 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n  margin: 0;\n  /* 1 */\n  line-height: inherit;\n  /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n  height: 0;\n  /* 1 */\n  color: inherit;\n  /* 2 */\n  border-top-width: 1px;\n  /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n  -webkit-text-decoration: underline dotted;\n          text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  font-size: inherit;\n  font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n  color: inherit;\n  text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font-family by default.\n2. Use the user's configured `mono` font-feature-settings by default.\n3. Use the user's configured `mono` font-variation-settings by default.\n4. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  /* 1 */\n  font-feature-settings: normal;\n  /* 2 */\n  font-variation-settings: normal;\n  /* 3 */\n  font-size: 1em;\n  /* 4 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n  font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n  text-indent: 0;\n  /* 1 */\n  border-color: inherit;\n  /* 2 */\n  border-collapse: collapse;\n  /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font-family: inherit;\n  /* 1 */\n  font-feature-settings: inherit;\n  /* 1 */\n  font-variation-settings: inherit;\n  /* 1 */\n  font-size: 100%;\n  /* 1 */\n  font-weight: inherit;\n  /* 1 */\n  line-height: inherit;\n  /* 1 */\n  color: inherit;\n  /* 1 */\n  margin: 0;\n  /* 2 */\n  padding: 0;\n  /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n  -webkit-appearance: button;\n  /* 1 */\n  background-color: transparent;\n  /* 2 */\n  background-image: none;\n  /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n  outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n  box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n  vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n  -webkit-appearance: textfield;\n  /* 1 */\n  outline-offset: -2px;\n  /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button;\n  /* 1 */\n  font: inherit;\n  /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n  display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n  margin: 0;\n}\n\nfieldset {\n  margin: 0;\n  padding: 0;\n}\n\nlegend {\n  padding: 0;\n}\n\nol,\nul,\nmenu {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\n\ndialog {\n  padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n  resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n  opacity: 1;\n  /* 1 */\n  color: #9ca3af;\n  /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n  opacity: 1;\n  /* 1 */\n  color: #9ca3af;\n  /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n  cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n\n:disabled {\n  cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n   This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n  display: block;\n  /* 1 */\n  vertical-align: middle;\n  /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n  max-width: 100%;\n  height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n\n[hidden] {\n  display: none;\n}\n\n*, ::before, ::after {\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-gradient-from-position:  ;\n  --tw-gradient-via-position:  ;\n  --tw-gradient-to-position:  ;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n}\n\n::backdrop {\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-gradient-from-position:  ;\n  --tw-gradient-via-position:  ;\n  --tw-gradient-to-position:  ;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n}\n\n.container {\n  width: 100%;\n}\n\n@media (min-width: 640px) {\n  .container {\n    max-width: 640px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container {\n    max-width: 768px;\n  }\n}\n\n@media (min-width: 1024px) {\n  .container {\n    max-width: 1024px;\n  }\n}\n\n@media (min-width: 1280px) {\n  .container {\n    max-width: 1280px;\n  }\n}\n\n@media (min-width: 1536px) {\n  .container {\n    max-width: 1536px;\n  }\n}\n\n.mx-auto {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n.my-6 {\n  margin-top: 1.5rem;\n  margin-bottom: 1.5rem;\n}\n\n.my-4 {\n  margin-top: 1rem;\n  margin-bottom: 1rem;\n}\n\n.mx-4 {\n  margin-left: 1rem;\n  margin-right: 1rem;\n}\n\n.flex {\n  display: flex;\n}\n\n.flex-col {\n  flex-direction: column;\n}\n\n.gap-4 {\n  gap: 1rem;\n}\n\n.bg-red-50 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(254 242 242 / var(--tw-bg-opacity));\n}\n\n.bg-slate-950 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(2 6 23 / var(--tw-bg-opacity));\n}\n\n.bg-black {\n  --tw-bg-opacity: 1;\n  background-color: rgb(0 0 0 / var(--tw-bg-opacity));\n}\n\n.py-9 {\n  padding-top: 2.25rem;\n  padding-bottom: 2.25rem;\n}\n\n.py-4 {\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n}\n\n.text-xl {\n  font-size: 1.25rem;\n  line-height: 1.75rem;\n}\n\n.text-3xl {\n  font-size: 1.875rem;\n  line-height: 2.25rem;\n}\n\n.text-2xl {\n  font-size: 1.5rem;\n  line-height: 2rem;\n}\n\n.text-lg {\n  font-size: 1.125rem;\n  line-height: 1.75rem;\n}\n\n.font-bold {\n  font-weight: 700;\n}\n\n.text-white {\n  --tw-text-opacity: 1;\n  color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n\n.text-gray-400 {\n  --tw-text-opacity: 1;\n  color: rgb(156 163 175 / var(--tw-text-opacity));\n}"
  },
  {
    "path": "Video 102/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\"*.html\"],\n  theme: {\n    extend: {},\n  },\n  plugins: [],\n}\n\n"
  },
  {
    "path": "Video 103/Readme.md",
    "content": "Types of Hosting:\n1. Shared Hosting\n2. Dedicated Hosting\n3. Managed Hosting\n\nLinux Tutorial: https://www.youtube.com/watch?v=_tCY-c-sPZc"
  },
  {
    "path": "Video 103/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>My first hosted website</title>\n    <style>\n        body{\n            background-color: rgb(11, 103, 232);\n            color: white;\n        }\n    </style>\n</head>\n<body>\n    <div class=\"container\">\n        This is my first hosted website\n    </div>\n</body>\n</html>"
  },
  {
    "path": "Video 103/package.json",
    "content": "{\n  \"name\": \"video-103\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Types of Hosting:\\r 1. Shared Hosting\\r 2. Dedicated Hosting\\r 3. Managed Hosting\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"keywords\": [],\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"dotenv\": \"^16.4.0\",\n    \"express\": \"^4.18.2\"\n  }\n}\n"
  },
  {
    "path": "Video 103/src/index.js",
    "content": "const express = require('express')\nrequire('dotenv').config()\nconst app = express()\nconst port = 3000\n\n\napp.get('/', (req, res) => {\n  res.send('Hello World!')\n})\n\napp.listen(port, () => {\n  console.log(`Example app listening on port ${port}`)\n})"
  },
  {
    "path": "Video 104/Readme.md",
    "content": "## How to host Node.js apps on Ubuntu\n\n### Step 1 - Installing Node.js & build essentials\n```\ncurl -fsSL https://deb.nodesource.com/setup_21.x | sudo -E bash - &&\\\nsudo apt-get install -y nodejs\n```\nNow install build essentials\n```\nsudo apt-get install build-essential\n```\n\n### Step 2 - Create a sample Node.js app\nYou can also use your own app if you want to host it. Otherwise if you are just trying out, you can use a sample app.\n\n\n### Step 3 - Install pm2 & launch your app\nInstall pm2 package which is a process manager for Node.js applications\n```\nsudo npm install -g pm2\n```\n\nNow launch your app using this command\n```\npm2 start index.js\n```\n\n### Step 4 - Install nginx\nNginx is a web server which we will be using as a proxy\n```\nsudo apt install nginx\n```\n\nNow edit the file at /etc/nginx/sites-available/default using following command \n```\nsudo nano /etc/nginx/sites-available/default\n```\n\nWe want this file to look like this:\n```\n. . .\n    location / {\n        proxy_pass http://localhost:3000;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection 'upgrade';\n        proxy_set_header Host $host;\n        proxy_cache_bypass $http_upgrade;\n    }\n}\n...\n```\n\n### Step 5 - Test and restart nginx\nTest and restart nginx using following commands\n```\nsudo nginx -t\n```\nNow restart using:\n```\nsudo systemctl restart nginx\n```"
  },
  {
    "path": "Video 104/index.js",
    "content": "const express = require('express')\nconst app = express()\nconst port = 3000\n\napp.get('/', (req, res) => {\n  res.send('Hello World!')\n})\n\napp.listen(port, () => {\n  console.log(`Example app listening on port ${port}`)\n})"
  },
  {
    "path": "Video 104/package.json",
    "content": "{\n  \"name\": \"hosting-node.js-apps\",\n  \"version\": \"1.0.0\",\n  \"description\": \"```\\r curl -fsSL https://deb.nodesource.com/setup_21.x | sudo -E bash - &&\\\\\\r sudo apt-get install -y nodejs\\r ```\\r Now install build essentials\\r ```\\r sudo apt-get install build-essential\\r ```\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"keywords\": [],\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"express\": \"^4.18.2\"\n  }\n}\n"
  },
  {
    "path": "Video 105/Readme.md",
    "content": "# Why React?\n- We can use states which means that once we update the state variable, it changes across the page\n- We can split our app into multiple components and reuse those components\n- React uses a virtual DOM to efficiently update the UI which is better than updating content using DOM Manipulation\n- Debugging and maintainance is easy\n"
  },
  {
    "path": "Video 105/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Why React?</title>\n    <style>\n        .box{\n            color: red;\n            height: 121px;\n            width: 121px;\n            border: 2px solid black;\n            padding: 3px;\n        }\n    </style>\n</head>\n<body>\n    <script>\n         let box1 = \"I am box 1\";\n         let box2 = \"I am box 2\";\n         let box3 = \"I am box 3\";\n    </script>\n    <div class=\"box box1\">1</div>\n    <div class=\"box box2\">I am box 2</div>\n    <div class=\"box box3\">I am box 3</div>\n    <button>click me</button>\n    <script>\n       \n        setTimeout(() => {\n            document.querySelector(\".box1\").innerHTML = \"Hey\"\n        }, 1000);\n\n        setTimeout(() => {\n            document.querySelector(\".box2\").innerHTML = \"Hi\"\n        }, 2000);\n\n        setTimeout(() => {\n            document.querySelector(\".box3\").innerHTML = \"Hello\"\n        }, 3000); \n    </script>\n</body>\n</html>"
  },
  {
    "path": "Video 105/with-react/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n\n# testing\n/coverage\n\n# production\n/build\n\n# misc\n.DS_Store\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": "Video 105/with-react/README.md",
    "content": "# Getting Started with Create React App\n\nThis project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).\n\n## Available Scripts\n\nIn the project directory, you can run:\n\n### `npm start`\n\nRuns the app in the development mode.\\\nOpen [http://localhost:3000](http://localhost:3000) to view it in your browser.\n\nThe page will reload when you make changes.\\\nYou may also see any lint errors in the console.\n\n### `npm test`\n\nLaunches the test runner in the interactive watch mode.\\\nSee the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.\n\n### `npm run build`\n\nBuilds the app for production to the `build` folder.\\\nIt correctly bundles React in production mode and optimizes the build for the best performance.\n\nThe build is minified and the filenames include the hashes.\\\nYour app is ready to be deployed!\n\nSee the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.\n\n### `npm run eject`\n\n**Note: this is a one-way operation. Once you `eject`, you can't go back!**\n\nIf you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.\n\nInstead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own.\n\nYou don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it.\n\n## Learn More\n\nYou can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).\n\nTo learn React, check out the [React documentation](https://reactjs.org/).\n\n### Code Splitting\n\nThis section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting)\n\n### Analyzing the Bundle Size\n\nThis section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size)\n\n### Making a Progressive Web App\n\nThis section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app)\n\n### Advanced Configuration\n\nThis section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration)\n\n### Deployment\n\nThis section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment)\n\n### `npm run build` fails to minify\n\nThis section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify)\n"
  },
  {
    "path": "Video 105/with-react/package.json",
    "content": "{\n  \"name\": \"with-react\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"dependencies\": {\n    \"@testing-library/jest-dom\": \"^5.17.0\",\n    \"@testing-library/react\": \"^13.4.0\",\n    \"@testing-library/user-event\": \"^13.5.0\",\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\",\n    \"react-scripts\": \"5.0.1\",\n    \"web-vitals\": \"^2.1.4\"\n  },\n  \"scripts\": {\n    \"start\": \"react-scripts start\",\n    \"build\": \"react-scripts build\",\n    \"test\": \"react-scripts test\",\n    \"eject\": \"react-scripts eject\"\n  },\n  \"eslintConfig\": {\n    \"extends\": [\n      \"react-app\",\n      \"react-app/jest\"\n    ]\n  },\n  \"browserslist\": {\n    \"production\": [\n      \">0.2%\",\n      \"not dead\",\n      \"not op_mini all\"\n    ],\n    \"development\": [\n      \"last 1 chrome version\",\n      \"last 1 firefox version\",\n      \"last 1 safari version\"\n    ]\n  }\n}\n"
  },
  {
    "path": "Video 105/with-react/public/harry.txt",
    "content": "Hey harry"
  },
  {
    "path": "Video 105/with-react/public/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <link rel=\"icon\" href=\"%PUBLIC_URL%/favicon.ico\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <meta name=\"theme-color\" content=\"#000000\" />\n    <meta\n      name=\"description\"\n      content=\"Web site created using create-react-app\"\n    />\n    <link rel=\"apple-touch-icon\" href=\"%PUBLIC_URL%/logo192.png\" />\n    <!--\n      manifest.json provides metadata used when your web app is installed on a\n      user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/\n    -->\n    <link rel=\"manifest\" href=\"%PUBLIC_URL%/manifest.json\" />\n    <!--\n      Notice the use of %PUBLIC_URL% in the tags above.\n      It will be replaced with the URL of the `public` folder during the build.\n      Only files inside the `public` folder can be referenced from the HTML.\n\n      Unlike \"/favicon.ico\" or \"favicon.ico\", \"%PUBLIC_URL%/favicon.ico\" will\n      work correctly both with client-side routing and a non-root public URL.\n      Learn how to configure a non-root public URL by running `npm run build`.\n    -->\n    <title>React App</title>\n  </head>\n  <body>\n    <noscript>You need to enable JavaScript to run this app.</noscript>\n    <div id=\"root\"></div>\n    <!--\n      This HTML file is a template.\n      If you open it directly in the browser, you will see an empty page.\n\n      You can add webfonts, meta tags, or analytics to this file.\n      The build step will place the bundled scripts into the <body> tag.\n\n      To begin the development, run `npm start` or `yarn start`.\n      To create a production bundle, use `npm run build` or `yarn build`.\n    -->\n  </body>\n</html>\n"
  },
  {
    "path": "Video 105/with-react/public/manifest.json",
    "content": "{\n  \"short_name\": \"React App\",\n  \"name\": \"Create React App Sample\",\n  \"icons\": [\n    {\n      \"src\": \"favicon.ico\",\n      \"sizes\": \"64x64 32x32 24x24 16x16\",\n      \"type\": \"image/x-icon\"\n    },\n    {\n      \"src\": \"logo192.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"192x192\"\n    },\n    {\n      \"src\": \"logo512.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"512x512\"\n    }\n  ],\n  \"start_url\": \".\",\n  \"display\": \"standalone\",\n  \"theme_color\": \"#000000\",\n  \"background_color\": \"#ffffff\"\n}\n"
  },
  {
    "path": "Video 105/with-react/public/robots.txt",
    "content": "# https://www.robotstxt.org/robotstxt.html\nUser-agent: *\nDisallow:\n"
  },
  {
    "path": "Video 105/with-react/src/App.css",
    "content": ".App {\n  text-align: center;\n}\n\n.App-logo {\n  height: 40vmin;\n  pointer-events: none;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  .App-logo {\n    animation: App-logo-spin infinite 20s linear;\n  }\n}\n\n.App-header {\n  background-color: #282c34;\n  min-height: 100vh;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  font-size: calc(10px + 2vmin);\n  color: white;\n}\n\n.App-link {\n  color: #61dafb;\n}\n\n@keyframes App-logo-spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n"
  },
  {
    "path": "Video 105/with-react/src/App.js",
    "content": "import logo from './logo.svg';\nimport { useState } from 'react';\nimport \"./App.css\"\nimport Navbar from './components/Navbar';\nimport Footer from './components/Footer';\n\n\nfunction App() {\n  const [value, setValue] = useState(0)\n\n  return (\n    <div className=\"App\">\n      <Navbar logoText=\"CodeWithCWHHarry\"/>\n      <div className='value'> {value}</div>\n     <button onClick={()=>{setValue(value + 1)}}>Click me</button>\n     <Footer/>\n    </div>\n  );\n}\n\nexport default App;\n"
  },
  {
    "path": "Video 105/with-react/src/App.test.js",
    "content": "import { render, screen } from '@testing-library/react';\nimport App from './App';\n\ntest('renders learn react link', () => {\n  render(<App />);\n  const linkElement = screen.getByText(/learn react/i);\n  expect(linkElement).toBeInTheDocument();\n});\n"
  },
  {
    "path": "Video 105/with-react/src/components/Footer.js",
    "content": "import React from 'react'\n\nconst Footer = () => {\n  return (\n    <div>\n      I am a footer2\n      \n    </div>\n  )\n}\n\nexport default Footer\n"
  },
  {
    "path": "Video 105/with-react/src/components/Navbar.js",
    "content": "import React from 'react'\nimport Footer from './Footer'\n\nconst Navbar = (props) => {\n  return (\n    <div>\n      <div className=\"logo\">{props.logoText}</div>\n        <ul>\n            <li>Home</li>\n            <li>About</li>\n            <li>Contact Us</li>\n        </ul>\n        <Footer/>\n    </div>\n  )\n}\n\nexport default Navbar\n"
  },
  {
    "path": "Video 105/with-react/src/index.css",
    "content": "body {\n  margin: 0;\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n    'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\n    sans-serif;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n  font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',\n    monospace;\n}\n"
  },
  {
    "path": "Video 105/with-react/src/index.js",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\n\nconst root = ReactDOM.createRoot(document.getElementById('root'));\nroot.render(\n  <React.StrictMode>\n    <App />\n  </React.StrictMode>\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"
  },
  {
    "path": "Video 105/with-react/src/reportWebVitals.js",
    "content": "const reportWebVitals = onPerfEntry => {\n  if (onPerfEntry && onPerfEntry instanceof Function) {\n    import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n      getCLS(onPerfEntry);\n      getFID(onPerfEntry);\n      getFCP(onPerfEntry);\n      getLCP(onPerfEntry);\n      getTTFB(onPerfEntry);\n    });\n  }\n};\n\nexport default reportWebVitals;\n"
  },
  {
    "path": "Video 105/with-react/src/setupTests.js",
    "content": "// jest-dom adds custom jest matchers for asserting on DOM nodes.\n// allows you to do things like:\n// expect(element).toHaveTextContent(/react/i)\n// learn more: https://github.com/testing-library/jest-dom\nimport '@testing-library/jest-dom';\n"
  },
  {
    "path": "Video 105/withoutreact.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n<body>\n    <div id=\"counter\">0</div>\n    <button id=\"btn\">Click me</button>\n    <script>\n        document.getElementById(\"btn\").addEventListener(\"click\", ()=>{\n            let num = parseInt(document.getElementById(\"counter\").innerHTML)\n            document.getElementById(\"counter\").innerHTML = num + 1;\n        })\n    </script>\n</body>\n</html>"
  },
  {
    "path": "Video 106/first-app/.eslintrc.cjs",
    "content": "module.exports = {\n  root: true,\n  env: { browser: true, es2020: true },\n  extends: [\n    'eslint:recommended',\n    'plugin:react/recommended',\n    'plugin:react/jsx-runtime',\n    'plugin:react-hooks/recommended',\n  ],\n  ignorePatterns: ['dist', '.eslintrc.cjs'],\n  parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },\n  settings: { react: { version: '18.2' } },\n  plugins: ['react-refresh'],\n  rules: {\n    'react-refresh/only-export-components': [\n      'warn',\n      { allowConstantExport: true },\n    ],\n  },\n}\n"
  },
  {
    "path": "Video 106/first-app/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n"
  },
  {
    "path": "Video 106/first-app/README.md",
    "content": "# React + Vite\n\nThis template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.\n\nCurrently, two official plugins are available:\n\n- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh\n- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh\n"
  },
  {
    "path": "Video 106/first-app/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" type=\"image/svg+xml\" href=\"/vite.svg\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Vite + React</title>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script type=\"module\" src=\"/src/main.jsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "Video 106/first-app/package.json",
    "content": "{\n  \"name\": \"first-app\",\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"vite build\",\n    \"lint\": \"eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0\",\n    \"preview\": \"vite preview\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\"\n  },\n  \"devDependencies\": {\n    \"@types/react\": \"^18.2.43\",\n    \"@types/react-dom\": \"^18.2.17\",\n    \"@vitejs/plugin-react\": \"^4.2.1\",\n    \"eslint\": \"^8.55.0\",\n    \"eslint-plugin-react\": \"^7.33.2\",\n    \"eslint-plugin-react-hooks\": \"^4.6.0\",\n    \"eslint-plugin-react-refresh\": \"^0.4.5\",\n    \"vite\": \"^5.0.8\"\n  }\n}\n"
  },
  {
    "path": "Video 106/first-app/src/App.css",
    "content": "#root {\n  max-width: 1280px;\n  margin: 0 auto;\n  padding: 2rem;\n  text-align: center;\n}\n\n.logo {\n  height: 6em;\n  padding: 1.5em;\n  will-change: filter;\n  transition: filter 300ms;\n}\n.logo:hover {\n  filter: drop-shadow(0 0 2em #646cffaa);\n}\n.logo.react:hover {\n  filter: drop-shadow(0 0 2em #61dafbaa);\n}\n\n@keyframes logo-spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  a:nth-of-type(2) .logo {\n    animation: logo-spin infinite 20s linear;\n  }\n}\n\n.card {\n  padding: 2em;\n}\n\n.read-the-docs {\n  color: #888;\n}\n"
  },
  {
    "path": "Video 106/first-app/src/App.jsx",
    "content": "import Footer from \"./components/Footer\"\nimport Navbar from \"./components/Navbar\"\nimport Card from \"./components/Card\"\n\nfunction App() {\n\n  return (\n    <>\n      <Navbar />\n      <div className=\"cards\">\n        <Card title=\"card 1\" description=\"card 1 desc\" />\n        <Card title=\"card 2\" description=\"card 2 desc\" />\n        <Card title=\"card 3\" description=\"card 3 desc\" />\n        <Card title=\"card 4\" description=\"card 4 desc\" />\n      </div>\n      <Footer />\n    </>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "Video 106/first-app/src/components/Card.css",
    "content": ".card{\n    width: 20vw;\n    border: 2px solid black;\n    margin: 34px;\n    height: 300px; \n}"
  },
  {
    "path": "Video 106/first-app/src/components/Card.jsx",
    "content": "import React from 'react'\nimport \"./Card.css\"\n\nconst Card = (props) => {\n  return (\n    <div className='card' style={{overflow: \"hidden\" }}>\n        <img src=\"https://cdn.shopify.com/s/files/1/0306/6419/6141/articles/coding_languages.png?v=1619126283\" alt=\"\" width={333} style={{border: \"2px solid black\"}} />\n        <h1>{props.title}</h1>\n        <p>{props.description}</p>\n      \n    </div>\n  )\n}\n\nexport default Card\n"
  },
  {
    "path": "Video 106/first-app/src/components/Footer.css",
    "content": ".footer{\n    text-align: center; \n    background-color: rgb(41, 38, 38);\n    color: white;\n    width: 100%;\n    position: fixed;\n    bottom: 0; \n}"
  },
  {
    "path": "Video 106/first-app/src/components/Footer.jsx",
    "content": "import React from 'react'\nimport \"./Footer.css\"\nconst Footer = () => {\n  return (\n    <div className='footer'>\n      Copyright &copy; www.codewithharry.com | All rights reserved\n    </div>\n  )\n}\n\nexport default Footer\n"
  },
  {
    "path": "Video 106/first-app/src/components/Navbar.css",
    "content": "nav, ul{\n    display: flex;\n}\n\n\nli{\n    list-style-type: none;\n}\n\nul{\n    gap: 34px;\n}\n\nnav{\n    background-color: beige;\n    padding: 23px;\n}"
  },
  {
    "path": "Video 106/first-app/src/components/Navbar.jsx",
    "content": "import React from 'react'\nimport \"./Navbar.css\"\n\n\nconst Navbar = () => {\n  return (\n    <div>\n      <nav>\n        <ul>\n            <li>Home</li>\n            <li>About</li>\n            <li>Contact</li>\n        </ul>\n      </nav>\n    </div>\n  )\n}\n\nexport default Navbar\n"
  },
  {
    "path": "Video 106/first-app/src/index.css",
    "content": "*{\n  padding: 0;\n  margin: 0;\n}\n\n.cards{\n  display: flex;\n}"
  },
  {
    "path": "Video 106/first-app/src/main.jsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App.jsx'\nimport './index.css'\n\nReactDOM.createRoot(document.getElementById('root')).render(\n  <React.StrictMode>\n    <App />\n  </React.StrictMode>,\n)\n"
  },
  {
    "path": "Video 106/first-app/vite.config.js",
    "content": "import { defineConfig } from 'vite'\nimport react from '@vitejs/plugin-react'\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n  plugins: [react()],\n})\n"
  },
  {
    "path": "Video 107/state-intro/.eslintrc.cjs",
    "content": "module.exports = {\n  root: true,\n  env: { browser: true, es2020: true },\n  extends: [\n    'eslint:recommended',\n    'plugin:react/recommended',\n    'plugin:react/jsx-runtime',\n    'plugin:react-hooks/recommended',\n  ],\n  ignorePatterns: ['dist', '.eslintrc.cjs'],\n  parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },\n  settings: { react: { version: '18.2' } },\n  plugins: ['react-refresh'],\n  rules: {\n    'react-refresh/only-export-components': [\n      'warn',\n      { allowConstantExport: true },\n    ],\n  },\n}\n"
  },
  {
    "path": "Video 107/state-intro/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n"
  },
  {
    "path": "Video 107/state-intro/README.md",
    "content": "# React + Vite\n\nThis template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.\n\nCurrently, two official plugins are available:\n\n- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh\n- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh\n"
  },
  {
    "path": "Video 107/state-intro/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" type=\"image/svg+xml\" href=\"/vite.svg\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Todo List</title>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script type=\"module\" src=\"/src/main.jsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "Video 107/state-intro/package.json",
    "content": "{\n  \"name\": \"state-intro\",\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"vite build\",\n    \"lint\": \"eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0\",\n    \"preview\": \"vite preview\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\"\n  },\n  \"devDependencies\": {\n    \"@types/react\": \"^18.2.43\",\n    \"@types/react-dom\": \"^18.2.17\",\n    \"@vitejs/plugin-react\": \"^4.2.1\",\n    \"eslint\": \"^8.55.0\",\n    \"eslint-plugin-react\": \"^7.33.2\",\n    \"eslint-plugin-react-hooks\": \"^4.6.0\",\n    \"eslint-plugin-react-refresh\": \"^0.4.5\",\n    \"vite\": \"^5.0.8\"\n  }\n}\n"
  },
  {
    "path": "Video 107/state-intro/src/App.css",
    "content": "#root {\n  max-width: 1280px;\n  margin: 0 auto;\n  padding: 2rem;\n  text-align: center;\n}\n\n.logo {\n  height: 6em;\n  padding: 1.5em;\n  will-change: filter;\n  transition: filter 300ms;\n}\n.logo:hover {\n  filter: drop-shadow(0 0 2em #646cffaa);\n}\n.logo.react:hover {\n  filter: drop-shadow(0 0 2em #61dafbaa);\n}\n\n@keyframes logo-spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  a:nth-of-type(2) .logo {\n    animation: logo-spin infinite 20s linear;\n  }\n}\n\n.card {\n  padding: 2em;\n}\n\n.read-the-docs {\n  color: #888;\n}\n"
  },
  {
    "path": "Video 107/state-intro/src/App.jsx",
    "content": "import { useState } from 'react'\nimport reactLogo from './assets/react.svg'\nimport viteLogo from '/vite.svg'\nimport './App.css'\n\nfunction App() {\n  const [count, setCount] = useState(0)\n\n  return (\n    <>\n      <div>The count is {count}</div>\n      <button onClick={()=>{setCount(count + 1)}}>Update count</button>\n    </>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "Video 107/state-intro/src/Component.js",
    "content": "import React from 'react'\n\nconst Component = () => {\n  return (\n    <div>\n      <div className=\"container flex\">\n    <div className=\"item\">Harry</div>\n    <div className=\"item\">Rohan</div>\n    <div className=\"item\">Izhan</div>\n    <div className=\"item\">Harshita</div>\n      </div>\n      <div className=\"itemcontainer\">\n         <div className=\"item this\">\n            j\n         </div>\n      </div>\n    </div>\n  )\n}\n\nexport default Component\n"
  },
  {
    "path": "Video 107/state-intro/src/index.css",
    "content": ":root {\n  font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;\n  line-height: 1.5;\n  font-weight: 400;\n\n  color-scheme: light dark;\n  color: rgba(255, 255, 255, 0.87);\n  background-color: #242424;\n\n  font-synthesis: none;\n  text-rendering: optimizeLegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\na {\n  font-weight: 500;\n  color: #646cff;\n  text-decoration: inherit;\n}\na:hover {\n  color: #535bf2;\n}\n\nbody {\n  margin: 0;\n  display: flex;\n  place-items: center;\n  min-width: 320px;\n  min-height: 100vh;\n}\n\nh1 {\n  font-size: 3.2em;\n  line-height: 1.1;\n}\n\nbutton {\n  border-radius: 8px;\n  border: 1px solid transparent;\n  padding: 0.6em 1.2em;\n  font-size: 1em;\n  font-weight: 500;\n  font-family: inherit;\n  background-color: #1a1a1a;\n  cursor: pointer;\n  transition: border-color 0.25s;\n}\nbutton:hover {\n  border-color: #646cff;\n}\nbutton:focus,\nbutton:focus-visible {\n  outline: 4px auto -webkit-focus-ring-color;\n}\n\n@media (prefers-color-scheme: light) {\n  :root {\n    color: #213547;\n    background-color: #ffffff;\n  }\n  a:hover {\n    color: #747bff;\n  }\n  button {\n    background-color: #f9f9f9;\n  }\n}\n"
  },
  {
    "path": "Video 107/state-intro/src/main.jsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App.jsx'\nimport './index.css'\n\nReactDOM.createRoot(document.getElementById('root')).render(\n  <React.StrictMode>\n    <App />\n  </React.StrictMode>,\n)\n"
  },
  {
    "path": "Video 107/state-intro/vite.config.js",
    "content": "import { defineConfig } from 'vite'\nimport react from '@vitejs/plugin-react'\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n  plugins: [react()],\n})\n"
  },
  {
    "path": "Video 108/.eslintrc.cjs",
    "content": "module.exports = {\n  root: true,\n  env: { browser: true, es2020: true },\n  extends: [\n    'eslint:recommended',\n    'plugin:react/recommended',\n    'plugin:react/jsx-runtime',\n    'plugin:react-hooks/recommended',\n  ],\n  ignorePatterns: ['dist', '.eslintrc.cjs'],\n  parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },\n  settings: { react: { version: '18.2' } },\n  plugins: ['react-refresh'],\n  rules: {\n    'react-refresh/only-export-components': [\n      'warn',\n      { allowConstantExport: true },\n    ],\n  },\n}\n"
  },
  {
    "path": "Video 108/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n"
  },
  {
    "path": "Video 108/README.md",
    "content": "# React + Vite\n\nThis template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.\n\nCurrently, two official plugins are available:\n\n- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh\n- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh\n"
  },
  {
    "path": "Video 108/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" type=\"image/svg+xml\" href=\"/vite.svg\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Vite + React</title>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script type=\"module\" src=\"/src/main.jsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "Video 108/package.json",
    "content": "{\n  \"name\": \"video-108\",\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"vite build\",\n    \"lint\": \"eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0\",\n    \"preview\": \"vite preview\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\"\n  },\n  \"devDependencies\": {\n    \"@types/react\": \"^18.2.43\",\n    \"@types/react-dom\": \"^18.2.17\",\n    \"@vitejs/plugin-react\": \"^4.2.1\",\n    \"eslint\": \"^8.55.0\",\n    \"eslint-plugin-react\": \"^7.33.2\",\n    \"eslint-plugin-react-hooks\": \"^4.6.0\",\n    \"eslint-plugin-react-refresh\": \"^0.4.5\",\n    \"vite\": \"^5.0.8\"\n  }\n}\n"
  },
  {
    "path": "Video 108/src/App.css",
    "content": "#root {\n  max-width: 1280px;\n  margin: 0 auto;\n  padding: 2rem;\n  text-align: center;\n}\n\n.logo {\n  height: 6em;\n  padding: 1.5em;\n  will-change: filter;\n  transition: filter 300ms;\n}\n.logo:hover {\n  filter: drop-shadow(0 0 2em #646cffaa);\n}\n.logo.react:hover {\n  filter: drop-shadow(0 0 2em #61dafbaa);\n}\n\n@keyframes logo-spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  a:nth-of-type(2) .logo {\n    animation: logo-spin infinite 20s linear;\n  }\n}\n\n.card {\n  padding: 2em;\n}\n\n.read-the-docs {\n  color: #888;\n}\n"
  },
  {
    "path": "Video 108/src/App.jsx",
    "content": "import { useState, useEffect } from 'react'\nimport reactLogo from './assets/react.svg'\nimport viteLogo from '/vite.svg'\nimport './App.css'\nimport Navbar from './components/Navbar'\n\nfunction App() {\n  const [count, setCount] = useState(0)\n  const [first, setFirst] = useState(0)\n  const [color, setColor] = useState(0)\n\n\n  useEffect(() => {\n    alert(\"Count was changed\")\n    setColor(color + 1)\n  }, [count])\n\n\n  return (\n    <>\n      {/* <Navbar color={\"navy \" + \"blue\" + color} /> */}\n      <div>\n        <a href=\"https://vitejs.dev\" target=\"_blank\">\n          <img src={viteLogo} className=\"logo\" alt=\"Vite logo\" />\n        </a>\n        <a href=\"https://react.dev\" target=\"_blank\">\n          <img src={reactLogo} className=\"logo react\" alt=\"React logo\" />\n        </a>\n      </div>\n      <h1>Vite + React</h1>\n      <div className=\"card\">\n        <button onClick={() => setCount((count) => count + 1)}>\n          count is {count}\n        </button>\n        <p>\n          Edit <code>src/App.jsx</code> and save to test HMR\n        </p>\n      </div>\n      <p className=\"read-the-docs\">\n        Click on the Vite and React logos to learn more\n      </p>\n    </>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "Video 108/src/components/Navbar.jsx",
    "content": "import React, { useEffect } from 'react'\n\nconst Navbar = ({ color }) => {\n  // Case 1: Run on every render \n  useEffect(() => {\n    alert(\"Hey I will run on every render\")\n  })\n\n  // Case 2: Run only on first render \n  useEffect(() => {\n    alert(\"Hey welcome to my page. This is the first render\")\n  }, [])\n\n  // Case 3: Run only when certain values change\n  useEffect(() => {\n    alert(\"Hey I am running because color was changed\")\n  }, [color])\n\n  // Example of Cleanup function\n  useEffect(() => {\n    alert(\"Hey welcome to my page. This is the first render of app.jsx\")\n\n    return () => {\n      alert(\"component was unmounted\")\n    }\n  }, [])\n\n  return (\n    <div>\n      I am navbar of {color} color hehe..\n    </div>\n  )\n}\n\nexport default Navbar\n"
  },
  {
    "path": "Video 108/src/index.css",
    "content": ":root {\n  font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;\n  line-height: 1.5;\n  font-weight: 400;\n\n  color-scheme: light dark;\n  color: rgba(255, 255, 255, 0.87);\n  background-color: #242424;\n\n  font-synthesis: none;\n  text-rendering: optimizeLegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\na {\n  font-weight: 500;\n  color: #646cff;\n  text-decoration: inherit;\n}\na:hover {\n  color: #535bf2;\n}\n\nbody {\n  margin: 0;\n  display: flex;\n  place-items: center;\n  min-width: 320px;\n  min-height: 100vh;\n}\n\nh1 {\n  font-size: 3.2em;\n  line-height: 1.1;\n}\n\nbutton {\n  border-radius: 8px;\n  border: 1px solid transparent;\n  padding: 0.6em 1.2em;\n  font-size: 1em;\n  font-weight: 500;\n  font-family: inherit;\n  background-color: #1a1a1a;\n  cursor: pointer;\n  transition: border-color 0.25s;\n}\nbutton:hover {\n  border-color: #646cff;\n}\nbutton:focus,\nbutton:focus-visible {\n  outline: 4px auto -webkit-focus-ring-color;\n}\n\n@media (prefers-color-scheme: light) {\n  :root {\n    color: #213547;\n    background-color: #ffffff;\n  }\n  a:hover {\n    color: #747bff;\n  }\n  button {\n    background-color: #f9f9f9;\n  }\n}\n"
  },
  {
    "path": "Video 108/src/main.jsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App.jsx'\nimport './index.css'\n\nReactDOM.createRoot(document.getElementById('root')).render(\n  // <React.StrictMode>\n    <App />\n  // </React.StrictMode>,\n)\n"
  },
  {
    "path": "Video 108/vite.config.js",
    "content": "import { defineConfig } from 'vite'\nimport react from '@vitejs/plugin-react'\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n  plugins: [react()],\n})\n"
  },
  {
    "path": "Video 109/.eslintrc.cjs",
    "content": "module.exports = {\n  root: true,\n  env: { browser: true, es2020: true },\n  extends: [\n    'eslint:recommended',\n    'plugin:react/recommended',\n    'plugin:react/jsx-runtime',\n    'plugin:react-hooks/recommended',\n  ],\n  ignorePatterns: ['dist', '.eslintrc.cjs'],\n  parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },\n  settings: { react: { version: '18.2' } },\n  plugins: ['react-refresh'],\n  rules: {\n    'react-refresh/only-export-components': [\n      'warn',\n      { allowConstantExport: true },\n    ],\n  },\n}\n"
  },
  {
    "path": "Video 109/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n"
  },
  {
    "path": "Video 109/README.md",
    "content": "# React + Vite\n\nThis template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.\n\nCurrently, two official plugins are available:\n\n- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh\n- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh\n"
  },
  {
    "path": "Video 109/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" type=\"image/svg+xml\" href=\"/vite.svg\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Vite + React</title>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script type=\"module\" src=\"/src/main.jsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "Video 109/package.json",
    "content": "{\n  \"name\": \"video-109\",\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"vite build\",\n    \"lint\": \"eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0\",\n    \"preview\": \"vite preview\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\"\n  },\n  \"devDependencies\": {\n    \"@types/react\": \"^18.2.43\",\n    \"@types/react-dom\": \"^18.2.17\",\n    \"@vitejs/plugin-react\": \"^4.2.1\",\n    \"eslint\": \"^8.55.0\",\n    \"eslint-plugin-react\": \"^7.33.2\",\n    \"eslint-plugin-react-hooks\": \"^4.6.0\",\n    \"eslint-plugin-react-refresh\": \"^0.4.5\",\n    \"vite\": \"^5.0.8\"\n  }\n}\n"
  },
  {
    "path": "Video 109/src/App.css",
    "content": "#root {\n  max-width: 1280px;\n  margin: 0 auto;\n  padding: 2rem;\n  text-align: center;\n}\n\n.logo {\n  height: 6em;\n  padding: 1.5em;\n  will-change: filter;\n  transition: filter 300ms;\n}\n.logo:hover {\n  filter: drop-shadow(0 0 2em #646cffaa);\n}\n.logo.react:hover {\n  filter: drop-shadow(0 0 2em #61dafbaa);\n}\n\n@keyframes logo-spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  a:nth-of-type(2) .logo {\n    animation: logo-spin infinite 20s linear;\n  }\n}\n\n.card {\n  padding: 2em;\n}\n\n.read-the-docs {\n  color: #888;\n}\n"
  },
  {
    "path": "Video 109/src/App.jsx",
    "content": "import { useState, useEffect, useRef } from 'react'\nimport reactLogo from './assets/react.svg'\nimport viteLogo from '/vite.svg'\nimport './App.css'\n\nfunction App() {\n  const [count, setCount] = useState(0)\n  const btnRef = useRef()\n\n  useEffect(() => { \n    console.log(`First rendering..`) \n    btnRef.current.style.backgroundColor = \"red\"\n  }, []);\n  \n\n  return (\n    <>\n      <div>\n        <a href=\"https://vitejs.dev\" target=\"_blank\">\n          <img src={viteLogo} className=\"logo\" alt=\"Vite logo\" />\n        </a>\n        <a href=\"https://react.dev\" target=\"_blank\">\n          <img src={reactLogo} className=\"logo react\" alt=\"React logo\" />\n        </a>\n      </div>\n      <h1>Vite + React</h1>\n      <div className=\"card\">\n        <button ref={btnRef} onClick={() => setCount((count) => count + 1)}>\n          count is {count}\n        </button>\n        <p>\n          Edit <code>src/App.jsx</code> and save to test HMR\n        </p>\n      </div>\n      <p className=\"read-the-docs\">\n        Click on the Vite and React logos to learn more\n      </p>\n      <button onClick={()=>{btnRef.current.style.display = \"none\"}}>Change me</button>\n    </>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "Video 109/src/App_1.jsx",
    "content": "import { useState, useEffect, useRef } from 'react'\nimport reactLogo from './assets/react.svg'\nimport viteLogo from '/vite.svg'\nimport './App.css'\n\nfunction App() {\n  const [count, setCount] = useState(0)\n  const a = useRef(0)\n\n  useEffect(() => {\n    a.current = a.current + 1\n    console.log(`rerendering and the value of a is ${a.current}..`) \n  });\n  \n\n  return (\n    <>\n      <div>\n        <a href=\"https://vitejs.dev\" target=\"_blank\">\n          <img src={viteLogo} className=\"logo\" alt=\"Vite logo\" />\n        </a>\n        <a href=\"https://react.dev\" target=\"_blank\">\n          <img src={reactLogo} className=\"logo react\" alt=\"React logo\" />\n        </a>\n      </div>\n      <h1>Vite + React</h1>\n      <div className=\"card\">\n        <button onClick={() => setCount((count) => count + 1)}>\n          count is {count}\n        </button>\n        <p>\n          Edit <code>src/App.jsx</code> and save to test HMR\n        </p>\n      </div>\n      <p className=\"read-the-docs\">\n        Click on the Vite and React logos to learn more\n      </p>\n    </>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "Video 109/src/Todo.jsx",
    "content": "import React from 'react'\n\nconst Todo = () => {\n    let todo = {\n        title: \"This is todo title\",\n        desc: \"Hey this is a todo description\"\n        \n    }\n  return (\n    <div>\n      <div className=\"flex\">\n        <div className=\"item\">\n            <h1>{todo.desc}</h1>\n            <p>This is a demo paragraph</p>\n            <p>This is a demo Lorem ipsum dolor sit, amet consectetur adipisicing elit. Dolore nulla amet similique nostrum voluptates officia, dolorum atque maxime aperiam eos veniam cupiditate dignissimos, magnam aliquid pariatur non. Dolorum ea officiis ex rerum.</p>\n\n            <div className=\"flex\">\n                \n            </div>\n        </div>\n      </div>\n    </div>\n  )\n}\n\nexport default Todo\n"
  },
  {
    "path": "Video 109/src/index.css",
    "content": ":root {\n  font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;\n  line-height: 1.5;\n  font-weight: 400;\n\n  color-scheme: light dark;\n  color: rgba(255, 255, 255, 0.87);\n  background-color: #242424;\n\n  font-synthesis: none;\n  text-rendering: optimizeLegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\na {\n  font-weight: 500;\n  color: #646cff;\n  text-decoration: inherit;\n}\na:hover {\n  color: #535bf2;\n}\n\nbody {\n  margin: 0;\n  display: flex;\n  place-items: center;\n  min-width: 320px;\n  min-height: 100vh;\n}\n\nh1 {\n  font-size: 3.2em;\n  line-height: 1.1;\n}\n\nbutton {\n  border-radius: 8px;\n  border: 1px solid transparent;\n  padding: 0.6em 1.2em;\n  font-size: 1em;\n  font-weight: 500;\n  font-family: inherit;\n  background-color: #1a1a1a;\n  cursor: pointer;\n  transition: border-color 0.25s;\n}\nbutton:hover {\n  border-color: #646cff;\n}\nbutton:focus,\nbutton:focus-visible {\n  outline: 4px auto -webkit-focus-ring-color;\n}\n\n@media (prefers-color-scheme: light) {\n  :root {\n    color: #213547;\n    background-color: #ffffff;\n  }\n  a:hover {\n    color: #747bff;\n  }\n  button {\n    background-color: #f9f9f9;\n  }\n}\n"
  },
  {
    "path": "Video 109/src/main.jsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App.jsx'\nimport './index.css'\n\nReactDOM.createRoot(document.getElementById('root')).render(\n  // <React.StrictMode>\n    <App />\n  // </React.StrictMode>,\n)\n"
  },
  {
    "path": "Video 109/vite.config.js",
    "content": "import { defineConfig } from 'vite'\nimport react from '@vitejs/plugin-react'\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n  plugins: [react()],\n})\n"
  },
  {
    "path": "Video 11/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Semantic Tags</title>\n</head>\n<body>\n    <header>\n        <nav>\n            <ul>\n                <li>Home</li>\n                <li>About</li>\n                <li>Contact</li>\n            </ul>\n        </nav>\n    </header>\n\n    <main>\n        <h1>What are Semantic Tags</h1>\n        \n    </main>\n\n    <footer>\n        Copyright CWH | All rights reserved\n    </footer>\n    \n    <!-- <img src=\"semantic-tags.png\" alt=\"\"> -->\n</body>\n</html>"
  },
  {
    "path": "Video 110/.eslintrc.cjs",
    "content": "module.exports = {\n  root: true,\n  env: { browser: true, es2020: true },\n  extends: [\n    'eslint:recommended',\n    'plugin:react/recommended',\n    'plugin:react/jsx-runtime',\n    'plugin:react-hooks/recommended',\n  ],\n  ignorePatterns: ['dist', '.eslintrc.cjs'],\n  parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },\n  settings: { react: { version: '18.2' } },\n  plugins: ['react-refresh'],\n  rules: {\n    'react-refresh/only-export-components': [\n      'warn',\n      { allowConstantExport: true },\n    ],\n  },\n}\n"
  },
  {
    "path": "Video 110/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n"
  },
  {
    "path": "Video 110/README.md",
    "content": "# React + Vite\n\nThis template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.\n\nCurrently, two official plugins are available:\n\n- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh\n- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh\n"
  },
  {
    "path": "Video 110/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" type=\"image/svg+xml\" href=\"/vite.svg\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Vite + React</title>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script type=\"module\" src=\"/src/main.jsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "Video 110/package.json",
    "content": "{\n  \"name\": \"video-110\",\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"vite build\",\n    \"lint\": \"eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0\",\n    \"preview\": \"vite preview\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\"\n  },\n  \"devDependencies\": {\n    \"@types/react\": \"^18.2.43\",\n    \"@types/react-dom\": \"^18.2.17\",\n    \"@vitejs/plugin-react\": \"^4.2.1\",\n    \"autoprefixer\": \"^10.4.17\",\n    \"eslint\": \"^8.55.0\",\n    \"eslint-plugin-react\": \"^7.33.2\",\n    \"eslint-plugin-react-hooks\": \"^4.6.0\",\n    \"eslint-plugin-react-refresh\": \"^0.4.5\",\n    \"postcss\": \"^8.4.33\",\n    \"tailwindcss\": \"^3.4.1\",\n    \"vite\": \"^5.0.8\"\n  }\n}\n"
  },
  {
    "path": "Video 110/postcss.config.js",
    "content": "export default {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {},\n  },\n}\n"
  },
  {
    "path": "Video 110/src/App.css",
    "content": "#root {\n  max-width: 1280px;\n  margin: 0 auto;\n  padding: 2rem;\n  text-align: center;\n}\n\n.logo {\n  height: 6em;\n  padding: 1.5em;\n  will-change: filter;\n  transition: filter 300ms;\n}\n.logo:hover {\n  filter: drop-shadow(0 0 2em #646cffaa);\n}\n.logo.react:hover {\n  filter: drop-shadow(0 0 2em #61dafbaa);\n}\n\n@keyframes logo-spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  a:nth-of-type(2) .logo {\n    animation: logo-spin infinite 20s linear;\n  }\n}\n\n.card {\n  padding: 2em;\n}\n\n.read-the-docs {\n  color: #888;\n}\n"
  },
  {
    "path": "Video 110/src/App.jsx",
    "content": "import { useState } from 'react'\nimport reactLogo from './assets/react.svg'\nimport viteLogo from '/vite.svg'\nimport './App.css'\n\nfunction App() {\n  const [count, setCount] = useState(0)\n  const [showbtn, setshowbtn] = useState(false)\n  const [todos, setTodos] = useState([\n    {\n      title: \"Hey\",\n      desc: \"I am a good todo\"\n    },\n    {\n      title: \"Hey Another todo\",\n      desc: \"I am a good todo too\"\n    },\n    {\n      title: \"Hey I am grocery todo\",\n      desc: \"I am a good todo but I am grocery todo\"\n    },\n\n  ])\n\n  // const Todo = ({todo}) => {\n  //   return (<>\n  //   <div className=\"m-4 border border-1 border-purple-400\">\n\n  //     <div className=\"todo\">{todo.title}</div>\n  //     <div className=\"todo\">{todo.desc}</div>\n  //   </div>\n  //     </>)\n  // }\n\n  return (\n    <>\n      <div>\n        <a href=\"https://vitejs.dev\" target=\"_blank\">\n          <img src={viteLogo} className=\"logo\" alt=\"Vite logo\" />\n        </a>\n        <a href=\"https://react.dev\" target=\"_blank\">\n          <img src={reactLogo} className=\"logo react\" alt=\"React logo\" />\n        </a>\n      </div>\n      <h1>Vite + React</h1>\n      {showbtn ? <button>showbtn is true</button> : <button>showbtn is false</button>}\n      {/* {showbtn && <button>showbtn is true</button>} */}\n\n      {todos.map(todo => {\n        // return <Todo key={todo.title} todo={todo}/>\n        return <div key={todo.title} className=\"m-4 border border-1 border-purple-400\">\n\n          <div className=\"todo\">{todo.title}</div>\n          <div className=\"todo\">{todo.desc}</div>\n        </div>\n      })}\n      <div className=\"card\">\n        <button onClick={() => setshowbtn(!showbtn)}>\n          Toggle showbtn\n        </button>\n        <p>\n          Edit <code>src/App.jsx</code> and save to test HMR\n        </p>\n      </div>\n      <p className=\"read-the-docs\">\n        Click on the Vite and React logos to learn more\n      </p>\n    </>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "Video 110/src/index.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n:root {\n  font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;\n  line-height: 1.5;\n  font-weight: 400;\n\n  color-scheme: light dark;\n  color: rgba(255, 255, 255, 0.87);\n  background-color: #242424;\n\n  font-synthesis: none;\n  text-rendering: optimizeLegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\na {\n  font-weight: 500;\n  color: #646cff;\n  text-decoration: inherit;\n}\na:hover {\n  color: #535bf2;\n}\n\nbody {\n  margin: 0;\n  display: flex;\n  place-items: center;\n  min-width: 320px;\n  min-height: 100vh;\n}\n\nh1 {\n  font-size: 3.2em;\n  line-height: 1.1;\n}\n\nbutton {\n  border-radius: 8px;\n  border: 1px solid transparent;\n  padding: 0.6em 1.2em;\n  font-size: 1em;\n  font-weight: 500;\n  font-family: inherit;\n  background-color: #1a1a1a;\n  cursor: pointer;\n  transition: border-color 0.25s;\n}\nbutton:hover {\n  border-color: #646cff;\n}\nbutton:focus,\nbutton:focus-visible {\n  outline: 4px auto -webkit-focus-ring-color;\n}\n\n@media (prefers-color-scheme: light) {\n  :root {\n    color: #213547;\n    background-color: #ffffff;\n  }\n  a:hover {\n    color: #747bff;\n  }\n  button {\n    background-color: #f9f9f9;\n  }\n}\n"
  },
  {
    "path": "Video 110/src/main.jsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App.jsx'\nimport './index.css'\n\nReactDOM.createRoot(document.getElementById('root')).render(\n  <React.StrictMode>\n    <App />\n  </React.StrictMode>,\n)\n"
  },
  {
    "path": "Video 110/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nexport default {\n  content: [\n    \"./index.html\",\n    \"./src/**/*.{js,ts,jsx,tsx}\",\n  ],\n  theme: {\n    extend: {},\n  },\n  plugins: [],\n}"
  },
  {
    "path": "Video 110/vite.config.js",
    "content": "import { defineConfig } from 'vite'\nimport react from '@vitejs/plugin-react'\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n  plugins: [react()],\n})\n"
  },
  {
    "path": "Video 111/Readme.md",
    "content": "You have to use an api and display the data in the form of a card under a container. All the data points returned by the API should be converted to a card\nUse this API: https://jsonplaceholder.typicode.com/posts\n\nHint: \nCreate a state for the data which will be fetched using the Json Placeholder API\nInside useEffect, use fetch to populate that state and then use map to render the cards from that state"
  },
  {
    "path": "Video 112/.eslintrc.cjs",
    "content": "module.exports = {\n  root: true,\n  env: { browser: true, es2020: true },\n  extends: [\n    'eslint:recommended',\n    'plugin:react/recommended',\n    'plugin:react/jsx-runtime',\n    'plugin:react-hooks/recommended',\n  ],\n  ignorePatterns: ['dist', '.eslintrc.cjs'],\n  parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },\n  settings: { react: { version: '18.2' } },\n  plugins: ['react-refresh'],\n  rules: {\n    'react-refresh/only-export-components': [\n      'warn',\n      { allowConstantExport: true },\n    ],\n  },\n}\n"
  },
  {
    "path": "Video 112/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n"
  },
  {
    "path": "Video 112/README.md",
    "content": "# React + Vite\n\nThis template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.\n\nCurrently, two official plugins are available:\n\n- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh\n- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh\n"
  },
  {
    "path": "Video 112/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" type=\"image/svg+xml\" href=\"/vite.svg\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Vite + React</title>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script type=\"module\" src=\"/src/main.jsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "Video 112/package.json",
    "content": "{\n  \"name\": \"video-112\",\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"vite build\",\n    \"lint\": \"eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0\",\n    \"preview\": \"vite preview\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\"\n  },\n  \"devDependencies\": {\n    \"@types/react\": \"^18.2.43\",\n    \"@types/react-dom\": \"^18.2.17\",\n    \"@vitejs/plugin-react\": \"^4.2.1\",\n    \"eslint\": \"^8.55.0\",\n    \"eslint-plugin-react\": \"^7.33.2\",\n    \"eslint-plugin-react-hooks\": \"^4.6.0\",\n    \"eslint-plugin-react-refresh\": \"^0.4.5\",\n    \"vite\": \"^5.0.8\"\n  }\n}\n"
  },
  {
    "path": "Video 112/src/App.css",
    "content": "#root {\n  max-width: 1280px;\n  margin: 0 auto;\n  padding: 2rem;\n  text-align: center;\n}\n\n.logo {\n  height: 6em;\n  padding: 1.5em;\n  will-change: filter;\n  transition: filter 300ms;\n}\n.logo:hover {\n  filter: drop-shadow(0 0 2em #646cffaa);\n}\n.logo.react:hover {\n  filter: drop-shadow(0 0 2em #61dafbaa);\n}\n\n@keyframes logo-spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  a:nth-of-type(2) .logo {\n    animation: logo-spin infinite 20s linear;\n  }\n}\n\n.card {\n  padding: 2em;\n}\n\n.read-the-docs {\n  color: #888;\n}\n"
  },
  {
    "path": "Video 112/src/App.jsx",
    "content": "import { useState } from 'react'\nimport reactLogo from './assets/react.svg'\nimport viteLogo from '/vite.svg'\nimport './App.css'\n\nfunction App() {\n  const [count, setCount] = useState(0)\n  // const [name, setName] = useState(\"Harry\")\n  const [form, setForm] = useState({})\n\n  const handleClick = () => {\n    alert(\"Hey I am clicked\")\n  }\n\n  const handleMouseOver = () => {\n    alert(\"Hey I am a mouse over\")\n  }\n\n  const handleChange = (e) => {\n    // setName(e.target.value)\n    setForm({...form, [e.target.name]:e.target.value})\n    console.log(form)\n  }\n\n  return (\n    <>\n      <div className=\"button\">\n        <button onClick={handleClick}>Click me</button>\n      </div>\n\n      {/* <div className=\"red\" onMouseOver={handleMouseOver}>\n        I am a red div\n      </div> */}\n\n      <input type=\"text\" name='email' value={form.email?form.email:\"\" } onChange={handleChange} />\n      <input type=\"text\" name='phone' value={form.phone?form.phone:\"\" } onChange={handleChange} /> \n    </>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "Video 112/src/index.css",
    "content": ":root {\n  font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;\n  line-height: 1.5;\n  font-weight: 400;\n\n  color-scheme: light dark;\n  color: rgba(255, 255, 255, 0.87);\n  background-color: #242424;\n\n  font-synthesis: none;\n  text-rendering: optimizeLegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.red{\n  background-color: red;\n  color: white;\n  height: 233px;\n  width: 344px;\n}\n\na {\n  font-weight: 500;\n  color: #646cff;\n  text-decoration: inherit;\n}\na:hover {\n  color: #535bf2;\n}\n\nbody {\n  margin: 0;\n  display: flex;\n  place-items: center;\n  min-width: 320px;\n  min-height: 100vh;\n}\n\nh1 {\n  font-size: 3.2em;\n  line-height: 1.1;\n}\n\nbutton {\n  border-radius: 8px;\n  border: 1px solid transparent;\n  padding: 0.6em 1.2em;\n  font-size: 1em;\n  font-weight: 500;\n  font-family: inherit;\n  background-color: #1a1a1a;\n  cursor: pointer;\n  transition: border-color 0.25s;\n}\nbutton:hover {\n  border-color: #646cff;\n}\nbutton:focus,\nbutton:focus-visible {\n  outline: 4px auto -webkit-focus-ring-color;\n}\n\n@media (prefers-color-scheme: light) {\n  :root {\n    color: #213547;\n    background-color: #ffffff;\n  }\n  a:hover {\n    color: #747bff;\n  }\n  button {\n    background-color: #f9f9f9;\n  }\n}\n"
  },
  {
    "path": "Video 112/src/main.jsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App.jsx'\nimport './index.css'\n\nReactDOM.createRoot(document.getElementById('root')).render(\n  <React.StrictMode>\n    <App />\n  </React.StrictMode>,\n)\n"
  },
  {
    "path": "Video 112/vite.config.js",
    "content": "import { defineConfig } from 'vite'\nimport react from '@vitejs/plugin-react'\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n  plugins: [react()],\n})\n"
  },
  {
    "path": "Video 113/.eslintrc.cjs",
    "content": "module.exports = {\n  root: true,\n  env: { browser: true, es2020: true },\n  extends: [\n    'eslint:recommended',\n    'plugin:react/recommended',\n    'plugin:react/jsx-runtime',\n    'plugin:react-hooks/recommended',\n  ],\n  ignorePatterns: ['dist', '.eslintrc.cjs'],\n  parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },\n  settings: { react: { version: '18.2' } },\n  plugins: ['react-refresh'],\n  rules: {\n    'react/jsx-no-target-blank': 'off',\n    'react-refresh/only-export-components': [\n      'warn',\n      { allowConstantExport: true },\n    ],\n  },\n}\n"
  },
  {
    "path": "Video 113/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n"
  },
  {
    "path": "Video 113/Readme.md",
    "content": "You have to use an api and display the data in the form of a card under a container. All the data points returned by the API should be converted to a card\nUse this API: https://jsonplaceholder.typicode.com/posts\n\nHint: \nCreate a state for the data which will be fetched using the Json Placeholder API\nInside useEffect, use fetch to populate that state and then use map to render the cards from that state"
  },
  {
    "path": "Video 113/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" type=\"image/svg+xml\" href=\"/vite.svg\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Vite + React</title>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script type=\"module\" src=\"/src/main.jsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "Video 113/package.json",
    "content": "{\n  \"name\": \"video-113\",\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"vite build\",\n    \"lint\": \"eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0\",\n    \"preview\": \"vite preview\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\"\n  },\n  \"devDependencies\": {\n    \"@types/react\": \"^18.2.55\",\n    \"@types/react-dom\": \"^18.2.19\",\n    \"@vitejs/plugin-react\": \"^4.2.1\",\n    \"eslint\": \"^8.56.0\",\n    \"eslint-plugin-react\": \"^7.33.2\",\n    \"eslint-plugin-react-hooks\": \"^4.6.0\",\n    \"eslint-plugin-react-refresh\": \"^0.4.5\",\n    \"vite\": \"^5.1.0\"\n  }\n}\n"
  },
  {
    "path": "Video 113/src/App.css",
    "content": ""
  },
  {
    "path": "Video 113/src/App.jsx",
    "content": "import { useState, useEffect } from 'react'\nimport Navbar from './components/Navbar'\nimport './App.css'\n\nfunction App() {\n  const [cards, setCards] = useState([])\n\n  const fetchData = async () => {\n    let a = await fetch(\"https://jsonplaceholder.typicode.com/posts\")\n    let data = await a.json()\n    setCards(data)\n    console.log(data)\n  }\n\n  useEffect(() => {\n    fetchData()\n  }, [])\n\n\n  return (\n    <>\n    <Navbar/> \n      <div className=\"container\">\n       {cards.map((card)=>{\n        return <div key={card.id} className=\"card\">\n          <h1>{card.title}</h1>\n          <p>{card.body}</p>\n          <span>By: UserId: {card.userId} </span>\n        </div>\n\n       })}\n        \n      </div>\n\n    </>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "Video 113/src/components/Navbar.jsx",
    "content": "import React from 'react'\n\nconst Navbar = () => {\n  return (\n    <nav>\n        <ul>\n            <li>Home</li>\n            <li>About</li>\n            <li>Contact Us</li>\n        </ul>\n    </nav>\n  )\n}\n\nexport default Navbar\n"
  },
  {
    "path": "Video 113/src/index.css",
    "content": ".card{\n  border: 2px solid black;\n  max-width: 23vw;\n}\n\n.container{\n  display: flex;\n  gap: 34px;\n  flex-wrap: wrap;\n}\n\n*{\n  margin: 0;\n  padding: 0;\n}\nnav, ul{\n  display: flex;\n  gap: 14px;\n  padding: 12px 3px;\n  background-color: rgb(46, 46, 44);\n  margin-bottom: 9px;\n  color: white;\n}\n\nli{\n  list-style: none;\n  \n}"
  },
  {
    "path": "Video 113/src/main.jsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App.jsx'\nimport './index.css'\n\nReactDOM.createRoot(document.getElementById('root')).render(\n  <React.StrictMode>\n    <App />\n  </React.StrictMode>,\n)\n"
  },
  {
    "path": "Video 113/vite.config.js",
    "content": "import { defineConfig } from 'vite'\nimport react from '@vitejs/plugin-react'\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n  plugins: [react()],\n})\n"
  },
  {
    "path": "Video 114/.eslintrc.cjs",
    "content": "module.exports = {\n  root: true,\n  env: { browser: true, es2020: true },\n  extends: [\n    'eslint:recommended',\n    'plugin:react/recommended',\n    'plugin:react/jsx-runtime',\n    'plugin:react-hooks/recommended',\n  ],\n  ignorePatterns: ['dist', '.eslintrc.cjs'],\n  parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },\n  settings: { react: { version: '18.2' } },\n  plugins: ['react-refresh'],\n  rules: {\n    'react/jsx-no-target-blank': 'off',\n    'react-refresh/only-export-components': [\n      'warn',\n      { allowConstantExport: true },\n    ],\n  },\n}\n"
  },
  {
    "path": "Video 114/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n"
  },
  {
    "path": "Video 114/README.md",
    "content": "# React + Vite\n\nThis template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.\n\nCurrently, two official plugins are available:\n\n- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh\n- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh\n"
  },
  {
    "path": "Video 114/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" type=\"image/svg+xml\" href=\"/vite.svg\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>iTask - Your Task Planner</title>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script type=\"module\" src=\"/src/main.jsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "Video 114/package.json",
    "content": "{\n  \"name\": \"video-114\",\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"vite build\",\n    \"lint\": \"eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0\",\n    \"preview\": \"vite preview\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\",\n    \"react-icons\": \"^5.0.1\",\n    \"uuid\": \"^9.0.1\"\n  },\n  \"devDependencies\": {\n    \"@types/react\": \"^18.2.55\",\n    \"@types/react-dom\": \"^18.2.19\",\n    \"@vitejs/plugin-react\": \"^4.2.1\",\n    \"autoprefixer\": \"^10.4.17\",\n    \"eslint\": \"^8.56.0\",\n    \"eslint-plugin-react\": \"^7.33.2\",\n    \"eslint-plugin-react-hooks\": \"^4.6.0\",\n    \"eslint-plugin-react-refresh\": \"^0.4.5\",\n    \"postcss\": \"^8.4.35\",\n    \"tailwindcss\": \"^3.4.1\",\n    \"vite\": \"^5.1.0\"\n  }\n}\n"
  },
  {
    "path": "Video 114/postcss.config.js",
    "content": "export default {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {},\n  },\n}\n"
  },
  {
    "path": "Video 114/src/App.css",
    "content": "#root {\n  max-width: 1280px;\n  margin: 0 auto;\n  padding: 2rem;\n  text-align: center;\n}\n\n.logo {\n  height: 6em;\n  padding: 1.5em;\n  will-change: filter;\n  transition: filter 300ms;\n}\n.logo:hover {\n  filter: drop-shadow(0 0 2em #646cffaa);\n}\n.logo.react:hover {\n  filter: drop-shadow(0 0 2em #61dafbaa);\n}\n\n@keyframes logo-spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  a:nth-of-type(2) .logo {\n    animation: logo-spin infinite 20s linear;\n  }\n}\n\n.card {\n  padding: 2em;\n}\n\n.read-the-docs {\n  color: #888;\n}\n"
  },
  {
    "path": "Video 114/src/App.jsx",
    "content": "import { useState, useEffect } from 'react'\nimport Navbar from './components/Navbar'\nimport { FaEdit } from \"react-icons/fa\";\nimport { AiFillDelete } from \"react-icons/ai\";\nimport { v4 as uuidv4 } from 'uuid';\n\nfunction App() { \n\n  const [todo, setTodo] = useState(\"\")\n  const [todos, setTodos] = useState([])\n  const [showFinished, setshowFinished] = useState(true)\n\n  useEffect(() => {\n    let todoString = localStorage.getItem(\"todos\")\n    if(todoString){\n      let todos = JSON.parse(localStorage.getItem(\"todos\")) \n      setTodos(todos)\n    }\n  }, [])\n  \n\n  const saveToLS = (params) => {\n    localStorage.setItem(\"todos\", JSON.stringify(todos))\n  }\n\n  const toggleFinished = (e) => {\n    setshowFinished(!showFinished)\n  }\n  \n  \n\n\n  const handleEdit = (e, id)=>{ \n    let t = todos.filter(i=>i.id === id) \n    setTodo(t[0].todo)\n    let newTodos = todos.filter(item=>{\n      return item.id!==id\n    }); \n    setTodos(newTodos) \n    saveToLS()\n  }\n\n  const handleDelete= (e, id)=>{  \n    let newTodos = todos.filter(item=>{\n      return item.id!==id\n    }); \n    setTodos(newTodos) \n    saveToLS()\n  }\n\n  const handleAdd= ()=>{\n    setTodos([...todos, {id: uuidv4(), todo, isCompleted: false}])\n    setTodo(\"\") \n    saveToLS()\n  }\n  \n  const handleChange= (e)=>{ \n    setTodo(e.target.value)\n  }\n\n  const handleCheckbox = (e) => { \n    let id = e.target.name;  \n    let index = todos.findIndex(item=>{\n      return item.id === id;\n    }) \n    let newTodos = [...todos];\n    newTodos[index].isCompleted = !newTodos[index].isCompleted;\n    setTodos(newTodos)\n    saveToLS()\n  }\n  \n\n  return (\n    < >\n    <Navbar/> \n       <div className=\"mx-3 md:container md:mx-auto my-5 rounded-xl p-5 bg-violet-100 min-h-[80vh] md:w-[35%]\">\n        <h1 className='font-bold text-center text-3xl'>iTask - Manage your todos at one place</h1>\n         <div className=\"addTodo my-5 flex flex-col gap-4\">\n          <h2 className='text-2xl font-bold'>Add a Todo</h2>\n          <div className=\"flex\">\n\n          <input  onChange={handleChange} value={todo} type=\"text\" className='w-full rounded-full px-5 py-1' />\n          <button onClick={handleAdd} disabled={todo.length<=3} className='bg-violet-800 mx-2 rounded-full hover:bg-violet-950 disabled:bg-violet-500 p-4 py-2 text-sm font-bold text-white'>Save</button>\n          </div>\n         </div>\n         <input className='my-4' id='show' onChange={toggleFinished} type=\"checkbox\" checked={showFinished} /> \n         <label className='mx-2' htmlFor=\"show\">Show Finished</label> \n         <div className='h-[1px] bg-black opacity-15 w-[90%] mx-auto my-2'></div>\n         <h2 className='text-2xl font-bold'>Your Todos</h2>\n         <div className=\"todos\">\n          {todos.length ===0 && <div className='m-5'>No Todos to display</div> }\n          {todos.map(item=>{\n \n          return (showFinished || !item.isCompleted) && <div key={item.id} className={\"todo flex my-3 justify-between\"}>\n            <div className='flex gap-5'> \n            <input name={item.id} onChange={handleCheckbox} type=\"checkbox\" checked={item.isCompleted} id=\"\" />\n            <div className={item.isCompleted?\"line-through\":\"\"}>{item.todo}</div>\n            </div>\n            <div className=\"buttons flex h-full\">\n              <button onClick={(e)=>handleEdit(e, item.id)} className='bg-violet-800 hover:bg-violet-950 p-2 py-1 text-sm font-bold text-white rounded-md mx-1'><FaEdit /></button>\n              <button onClick={(e)=>{handleDelete(e, item.id)}} className='bg-violet-800 hover:bg-violet-950 p-2 py-1 text-sm font-bold text-white rounded-md mx-1'><AiFillDelete /></button>\n            </div> \n          </div>\n          })}\n         </div>\n        \n       </div>\n    </>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "Video 114/src/components/Navbar.jsx",
    "content": "import React from 'react'\n\nconst Navbar = () => {\n  return (\n    <nav className='flex justify-around bg-indigo-900 text-white py-2'>\n        <div className=\"logo\">\n            <span className='font-bold text-xl mx-8'>iTask</span>\n        </div>\n      <ul className=\"flex gap-8 mx-9\">\n        <li className='cursor-pointer hover:font-bold transition-all'>Home</li>\n        <li className='cursor-pointer hover:font-bold transition-all'>Your Tasks</li>\n      </ul>\n    </nav>\n  )\n}\n\nexport default Navbar\n"
  },
  {
    "path": "Video 114/src/index.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n\nbody{\n    --tw-bg-opacity: 1;\n    background-color: rgb(226, 223, 239)\n}"
  },
  {
    "path": "Video 114/src/main.jsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App.jsx'\nimport './index.css'\n\nReactDOM.createRoot(document.getElementById('root')).render(\n  <React.StrictMode>\n    <App />\n  </React.StrictMode>,\n)\n"
  },
  {
    "path": "Video 114/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nexport default {\n  content: [\n    \"./index.html\",\n    \"./src/**/*.{js,ts,jsx,tsx}\",\n  ],\n  theme: {\n    extend: {},\n  },\n  plugins: [],\n}"
  },
  {
    "path": "Video 114/vite.config.js",
    "content": "import { defineConfig } from 'vite'\nimport react from '@vitejs/plugin-react'\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n  plugins: [react()],\n})\n"
  },
  {
    "path": "Video 115/.eslintrc.cjs",
    "content": "module.exports = {\n  root: true,\n  env: { browser: true, es2020: true },\n  extends: [\n    'eslint:recommended',\n    'plugin:react/recommended',\n    'plugin:react/jsx-runtime',\n    'plugin:react-hooks/recommended',\n  ],\n  ignorePatterns: ['dist', '.eslintrc.cjs'],\n  parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },\n  settings: { react: { version: '18.2' } },\n  plugins: ['react-refresh'],\n  rules: {\n    'react/jsx-no-target-blank': 'off',\n    'react-refresh/only-export-components': [\n      'warn',\n      { allowConstantExport: true },\n    ],\n  },\n}\n"
  },
  {
    "path": "Video 115/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n"
  },
  {
    "path": "Video 115/README.md",
    "content": "# React + Vite\n\nThis template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.\n\nCurrently, two official plugins are available:\n\n- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh\n- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh\n"
  },
  {
    "path": "Video 115/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" type=\"image/svg+xml\" href=\"/vite.svg\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Vite + React</title>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script type=\"module\" src=\"/src/main.jsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "Video 115/package.json",
    "content": "{\n  \"name\": \"video-115\",\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"vite build\",\n    \"lint\": \"eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0\",\n    \"preview\": \"vite preview\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\",\n    \"react-router-dom\": \"^6.22.0\"\n  },\n  \"devDependencies\": {\n    \"@types/react\": \"^18.2.55\",\n    \"@types/react-dom\": \"^18.2.19\",\n    \"@vitejs/plugin-react\": \"^4.2.1\",\n    \"eslint\": \"^8.56.0\",\n    \"eslint-plugin-react\": \"^7.33.2\",\n    \"eslint-plugin-react-hooks\": \"^4.6.0\",\n    \"eslint-plugin-react-refresh\": \"^0.4.5\",\n    \"vite\": \"^5.1.0\"\n  }\n}\n"
  },
  {
    "path": "Video 115/src/App.css",
    "content": ""
  },
  {
    "path": "Video 115/src/App.jsx",
    "content": "import './App.css'\nimport Navbar from './components/Navbar'\nimport Home from './components/Home'\nimport Login from './components/Login'\nimport About from './components/About'\nimport User from './components/User'\nimport { createBrowserRouter, RouterProvider } from 'react-router-dom'\n\nfunction App() {\n  const router = createBrowserRouter([\n    {\n      path: \"/\",\n      element: <><Navbar /><Home /></>\n    },\n    {\n      path: \"/login\",\n      element: <><Navbar /><Login /></>\n    },\n    {\n      path: \"/about\",\n      element: <><Navbar /><About /></>\n    },\n    {\n      path: \"/user/:username\",\n      element: <><Navbar /><User /></>\n    },\n  ])\n  return (\n    <>\n      \n      <RouterProvider router={router} />\n\n    </>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "Video 115/src/components/About.jsx",
    "content": "import React from 'react'\n\nconst About = () => {\n  return (\n    <div>\n      About\n    </div>\n  )\n}\n\nexport default About\n"
  },
  {
    "path": "Video 115/src/components/Home.jsx",
    "content": "import React from 'react'\n\nconst Home = () => {\n  return (\n    <div>\n      I am Home\n    </div>\n  )\n}\n\nexport default Home\n"
  },
  {
    "path": "Video 115/src/components/Login.jsx",
    "content": "import React from 'react'\n\nconst Login = () => {\n  return (\n    <div>\n      Login\n    </div>\n  )\n}\n\nexport default Login\n"
  },
  {
    "path": "Video 115/src/components/Navbar.jsx",
    "content": "import React from 'react'\nimport { NavLink } from 'react-router-dom'\n\nconst Navbar = () => {\n    \n  return (\n    <div>\n      <nav>\n        <NavLink className={(e)=>{return e.isActive?\"red\": \"\" }} to=\"/\"><li>Home</li></NavLink>\n        <NavLink className={(e)=>{return e.isActive?\"red\": \"\" }} to=\"/about\"><li>About</li></NavLink>\n        <NavLink className={(e)=>{return e.isActive?\"red\": \"\" }} to=\"/login\"><li>Login</li></NavLink>\n      </nav>\n    </div>\n  )\n}\n\nexport default Navbar\n"
  },
  {
    "path": "Video 115/src/components/User.jsx",
    "content": "import React from 'react'\nimport { useParams } from 'react-router-dom'\n\nconst User = () => {\n    const params = useParams()\n  return (\n    <div>\n      I am user {params.username}\n    </div>\n  )\n}\n\nexport default User\n"
  },
  {
    "path": "Video 115/src/index.css",
    "content": "nav{\n  display: flex;\n  gap: 34px;\n  background-color: black;\n  color: white;\n}\n\nli{\n  list-style: none;\n  padding: 23px;\n}\n\na li {\n  color: white;\n}\n\n*{\n  padding: 0;\n  margin: 0;\n}\n\n.red{\n  background-color: red;\n  color: white\n}"
  },
  {
    "path": "Video 115/src/main.jsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App.jsx'\nimport './index.css'\n\nReactDOM.createRoot(document.getElementById('root')).render(\n  \n  <React.StrictMode>\n    <App />\n  </React.StrictMode>,\n)\n"
  },
  {
    "path": "Video 115/vite.config.js",
    "content": "import { defineConfig } from 'vite'\nimport react from '@vitejs/plugin-react'\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n  plugins: [react()],\n})\n"
  },
  {
    "path": "Video 116/.eslintrc.cjs",
    "content": "module.exports = {\n  root: true,\n  env: { browser: true, es2020: true },\n  extends: [\n    'eslint:recommended',\n    'plugin:react/recommended',\n    'plugin:react/jsx-runtime',\n    'plugin:react-hooks/recommended',\n  ],\n  ignorePatterns: ['dist', '.eslintrc.cjs'],\n  parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },\n  settings: { react: { version: '18.2' } },\n  plugins: ['react-refresh'],\n  rules: {\n    'react/jsx-no-target-blank': 'off',\n    'react-refresh/only-export-components': [\n      'warn',\n      { allowConstantExport: true },\n    ],\n  },\n}\n"
  },
  {
    "path": "Video 116/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n"
  },
  {
    "path": "Video 116/README.md",
    "content": "# React + Vite\n\nThis template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.\n\nCurrently, two official plugins are available:\n\n- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh\n- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh\n"
  },
  {
    "path": "Video 116/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" type=\"image/svg+xml\" href=\"/vite.svg\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Vite + React</title>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script type=\"module\" src=\"/src/main.jsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "Video 116/our app.md",
    "content": "App.jsx\n    Navbar.jsx  \n        Button.jsx\n            Component1.jsx"
  },
  {
    "path": "Video 116/package.json",
    "content": "{\n  \"name\": \"video-116\",\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"vite build\",\n    \"lint\": \"eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0\",\n    \"preview\": \"vite preview\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\"\n  },\n  \"devDependencies\": {\n    \"@types/react\": \"^18.2.55\",\n    \"@types/react-dom\": \"^18.2.19\",\n    \"@vitejs/plugin-react\": \"^4.2.1\",\n    \"eslint\": \"^8.56.0\",\n    \"eslint-plugin-react\": \"^7.33.2\",\n    \"eslint-plugin-react-hooks\": \"^4.6.0\",\n    \"eslint-plugin-react-refresh\": \"^0.4.5\",\n    \"vite\": \"^5.1.0\"\n  }\n}\n"
  },
  {
    "path": "Video 116/public/without_context_api/App.jsx",
    "content": "import { useState } from 'react'\nimport reactLogo from './assets/react.svg'\nimport viteLogo from '/vite.svg'\nimport './App.css'\nimport Navbar from './components/Navbar'\n\nfunction App() {\n  const [count, setCount] = useState(0)\n\n  return (\n    <>\n    <Navbar count={count}/>\n      <div>\n        <a href=\"https://vitejs.dev\" target=\"_blank\">\n          <img src={viteLogo} className=\"logo\" alt=\"Vite logo\" />\n        </a>\n        <a href=\"https://react.dev\" target=\"_blank\">\n          <img src={reactLogo} className=\"logo react\" alt=\"React logo\" />\n        </a>\n      </div>\n      <h1>Vite + React</h1>\n      <div className=\"card\">\n        <button onClick={() => setCount((count) => count + 1)}>\n          count is {count}\n        </button>\n        <p>\n          Edit <code>src/App.jsx</code> and save to test HMR\n        </p>\n      </div>\n      <p className=\"read-the-docs\">\n        Click on the Vite and React logos to learn more\n      </p>\n    </>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "Video 116/public/without_context_api/components/Button.jsx",
    "content": "import React from 'react'\nimport Component1 from './Component1'\nconst Button = ({count}) => {\n  return (\n    <div>\n      <button><span><Component1 count={count}/></span>I am a button</button>\n    </div>\n  )\n}\n\nexport default Button\n"
  },
  {
    "path": "Video 116/public/without_context_api/components/Component1.jsx",
    "content": "import React from 'react'\n\nconst Component1 = ({count}) => {\n  return (\n    <div>\n     {count}\n    </div>\n  )\n}\n\nexport default Component1\n"
  },
  {
    "path": "Video 116/public/without_context_api/components/Navbar.jsx",
    "content": "import React from 'react'\nimport Button from './Button'\n\nconst Navbar = ({count}) => {\n  return (\n    <>\n    <div>\n      Navbar\n    </div>\n    <Button count={count}/>\n    </>\n  )\n}\n\nexport default Navbar\n"
  },
  {
    "path": "Video 116/src/App.css",
    "content": "#root {\n  max-width: 1280px;\n  margin: 0 auto;\n  padding: 2rem;\n  text-align: center;\n}\n\n.logo {\n  height: 6em;\n  padding: 1.5em;\n  will-change: filter;\n  transition: filter 300ms;\n}\n.logo:hover {\n  filter: drop-shadow(0 0 2em #646cffaa);\n}\n.logo.react:hover {\n  filter: drop-shadow(0 0 2em #61dafbaa);\n}\n\n@keyframes logo-spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  a:nth-of-type(2) .logo {\n    animation: logo-spin infinite 20s linear;\n  }\n}\n\n.card {\n  padding: 2em;\n}\n\n.read-the-docs {\n  color: #888;\n}\n"
  },
  {
    "path": "Video 116/src/App.jsx",
    "content": "import { useState } from 'react'\nimport reactLogo from './assets/react.svg'\nimport viteLogo from '/vite.svg'\nimport './App.css'\nimport Navbar from './components/Navbar'\nimport { counterContext } from './context/context'\n\nfunction App() {\n  const [count, setCount] = useState(0)\n\n  return (\n    <>\n    <counterContext.Provider value={{count, setCount}}>\n    <Navbar/>\n      <div>\n        <a href=\"https://vitejs.dev\" target=\"_blank\">\n          <img src={viteLogo} className=\"logo\" alt=\"Vite logo\" />\n        </a>\n        <a href=\"https://react.dev\" target=\"_blank\">\n          <img src={reactLogo} className=\"logo react\" alt=\"React logo\" />\n        </a>\n      </div>\n      <h1>Vite + React</h1>\n      <div className=\"card\">\n        <button onClick={() => setCount((count) => count + 1)}>\n          count is {count}\n        </button>\n        <p>\n          Edit <code>src/App.jsx</code> and save to test HMR\n        </p>\n      </div>\n      <p className=\"read-the-docs\">\n        Click on the Vite and React logos to learn more\n      </p>\n      </counterContext.Provider>\n    </>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "Video 116/src/components/Button.jsx",
    "content": "import React, {useContext} from 'react'\nimport Component1 from './Component1'\nimport { counterContext } from '../context/context'\n\nconst Button = () => {\n  const value = useContext(counterContext)\n  return (\n    <div>\n      <button onClick={() => value.setCount((count) => count + 1)}><span><Component1/></span>I am a button</button>\n    </div>\n  )\n}\n\nexport default Button\n"
  },
  {
    "path": "Video 116/src/components/Component1.jsx",
    "content": "import React, { useContext } from 'react'\nimport { counterContext } from '../context/context'\n\n\nconst Component1 = () => {\n  const value = useContext(counterContext)\n  return (\n    <div>\n    {value.count}\n    </div>\n  )\n}\n\nexport default Component1\n"
  },
  {
    "path": "Video 116/src/components/Navbar.jsx",
    "content": "import React from 'react'\nimport Button from './Button'\n\nconst Navbar = () => {\n  return (\n    <>\n    <div>\n      Navbar\n    </div>\n    <Button/>\n    </>\n  )\n}\n\nexport default Navbar\n"
  },
  {
    "path": "Video 116/src/context/context.js",
    "content": "import { createContext } from \"react\";\n\nexport const counterContext = createContext(0)"
  },
  {
    "path": "Video 116/src/index.css",
    "content": ":root {\n  font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;\n  line-height: 1.5;\n  font-weight: 400;\n\n  color-scheme: light dark;\n  color: rgba(255, 255, 255, 0.87);\n  background-color: #242424;\n\n  font-synthesis: none;\n  text-rendering: optimizeLegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\na {\n  font-weight: 500;\n  color: #646cff;\n  text-decoration: inherit;\n}\na:hover {\n  color: #535bf2;\n}\n\nbody {\n  margin: 0;\n  display: flex;\n  place-items: center;\n  min-width: 320px;\n  min-height: 100vh;\n}\n\nh1 {\n  font-size: 3.2em;\n  line-height: 1.1;\n}\n\nbutton {\n  border-radius: 8px;\n  border: 1px solid transparent;\n  padding: 0.6em 1.2em;\n  font-size: 1em;\n  font-weight: 500;\n  font-family: inherit;\n  background-color: #1a1a1a;\n  cursor: pointer;\n  transition: border-color 0.25s;\n}\nbutton:hover {\n  border-color: #646cff;\n}\nbutton:focus,\nbutton:focus-visible {\n  outline: 4px auto -webkit-focus-ring-color;\n}\n\n@media (prefers-color-scheme: light) {\n  :root {\n    color: #213547;\n    background-color: #ffffff;\n  }\n  a:hover {\n    color: #747bff;\n  }\n  button {\n    background-color: #f9f9f9;\n  }\n}\n"
  },
  {
    "path": "Video 116/src/main.jsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App.jsx'\nimport './index.css'\n\nReactDOM.createRoot(document.getElementById('root')).render(\n  <React.StrictMode>\n    <App />\n  </React.StrictMode>,\n)\n"
  },
  {
    "path": "Video 116/vite.config.js",
    "content": "import { defineConfig } from 'vite'\nimport react from '@vitejs/plugin-react'\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n  plugins: [react()],\n})\n"
  },
  {
    "path": "Video 118/.eslintrc.cjs",
    "content": "module.exports = {\n  root: true,\n  env: { browser: true, es2020: true },\n  extends: [\n    'eslint:recommended',\n    'plugin:react/recommended',\n    'plugin:react/jsx-runtime',\n    'plugin:react-hooks/recommended',\n  ],\n  ignorePatterns: ['dist', '.eslintrc.cjs'],\n  parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },\n  settings: { react: { version: '18.2' } },\n  plugins: ['react-refresh'],\n  rules: {\n    'react/jsx-no-target-blank': 'off',\n    'react-refresh/only-export-components': [\n      'warn',\n      { allowConstantExport: true },\n    ],\n  },\n}\n"
  },
  {
    "path": "Video 118/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n"
  },
  {
    "path": "Video 118/README.md",
    "content": "# React + Vite\n\nThis template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.\n\nCurrently, two official plugins are available:\n\n- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh\n- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh\n"
  },
  {
    "path": "Video 118/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" type=\"image/svg+xml\" href=\"/vite.svg\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Vite + React</title>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script type=\"module\" src=\"/src/main.jsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "Video 118/package.json",
    "content": "{\n  \"name\": \"video-118\",\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"vite build\",\n    \"lint\": \"eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0\",\n    \"preview\": \"vite preview\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\"\n  },\n  \"devDependencies\": {\n    \"@types/react\": \"^18.2.55\",\n    \"@types/react-dom\": \"^18.2.19\",\n    \"@vitejs/plugin-react\": \"^4.2.1\",\n    \"eslint\": \"^8.56.0\",\n    \"eslint-plugin-react\": \"^7.33.2\",\n    \"eslint-plugin-react-hooks\": \"^4.6.0\",\n    \"eslint-plugin-react-refresh\": \"^0.4.5\",\n    \"vite\": \"^5.1.0\"\n  }\n}\n"
  },
  {
    "path": "Video 118/src/App.css",
    "content": "#root {\n  max-width: 1280px;\n  margin: 0 auto;\n  padding: 2rem;\n  text-align: center;\n}\n\n.logo {\n  height: 6em;\n  padding: 1.5em;\n  will-change: filter;\n  transition: filter 300ms;\n}\n.logo:hover {\n  filter: drop-shadow(0 0 2em #646cffaa);\n}\n.logo.react:hover {\n  filter: drop-shadow(0 0 2em #61dafbaa);\n}\n\n@keyframes logo-spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  a:nth-of-type(2) .logo {\n    animation: logo-spin infinite 20s linear;\n  }\n}\n\n.card {\n  padding: 2em;\n}\n\n.read-the-docs {\n  color: #888;\n}\n"
  },
  {
    "path": "Video 118/src/App.jsx",
    "content": "import { useState, useCallback } from 'react'\nimport reactLogo from './assets/react.svg'\nimport viteLogo from '/vite.svg'\nimport './App.css'\nimport Navbar from './components/Navbar'\n\nfunction App() {\n  const [count, setCount] = useState(0)\n  const [count2, setCount2] = useState(0)\n  const [adjective, setAdjective] = useState(\"good\")\n\n  // const getAdjective = () => {\n  //   return \"another\" + count\n  // }\n\n  const getAdjective = useCallback(() => {\n    return \"another\" + count\n  },[count] )\n\n\n\n  return (\n    <>\n      <Navbar adjective={\"good\"} getAdjective={getAdjective} />\n      <div>\n        <a href=\"https://vitejs.dev\" target=\"_blank\">\n          <img src={viteLogo} className=\"logo\" alt=\"Vite logo\" />\n        </a>\n        <a href=\"https://react.dev\" target=\"_blank\">\n          <img src={reactLogo} className=\"logo react\" alt=\"React logo\" />\n        </a>\n      </div>\n      <h1>Vite + React</h1>\n      <div className=\"card\">\n        <button onClick={() => setCount((count) => count + 1)}>\n          count is {count}\n        </button>\n        <p>\n          Edit <code>src/App.jsx</code> and save to test HMR\n        </p>\n      </div>\n      <p className=\"read-the-docs\">\n        Click on the Vite and React logos to learn more\n      </p>\n    </>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "Video 118/src/components/Navbar.jsx",
    "content": "import React from 'react'\nimport { memo } from 'react'\n\nconst Navbar = ({adjective, getAdjective}) => {\n    console.log(\"Navbar is rendered\")\n  return (\n    <div>\n      I am a {adjective} Navbar\n      <button onClick={()=>{getAdjective()}}>{getAdjective()}</button>\n    </div>\n  )\n}\n\nexport default memo(Navbar)\n"
  },
  {
    "path": "Video 118/src/index.css",
    "content": ":root {\n  font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;\n  line-height: 1.5;\n  font-weight: 400;\n\n  color-scheme: light dark;\n  color: rgba(255, 255, 255, 0.87);\n  background-color: #242424;\n\n  font-synthesis: none;\n  text-rendering: optimizeLegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\na {\n  font-weight: 500;\n  color: #646cff;\n  text-decoration: inherit;\n}\na:hover {\n  color: #535bf2;\n}\n\nbody {\n  margin: 0;\n  display: flex;\n  place-items: center;\n  min-width: 320px;\n  min-height: 100vh;\n}\n\nh1 {\n  font-size: 3.2em;\n  line-height: 1.1;\n}\n\nbutton {\n  border-radius: 8px;\n  border: 1px solid transparent;\n  padding: 0.6em 1.2em;\n  font-size: 1em;\n  font-weight: 500;\n  font-family: inherit;\n  background-color: #1a1a1a;\n  cursor: pointer;\n  transition: border-color 0.25s;\n}\nbutton:hover {\n  border-color: #646cff;\n}\nbutton:focus,\nbutton:focus-visible {\n  outline: 4px auto -webkit-focus-ring-color;\n}\n\n@media (prefers-color-scheme: light) {\n  :root {\n    color: #213547;\n    background-color: #ffffff;\n  }\n  a:hover {\n    color: #747bff;\n  }\n  button {\n    background-color: #f9f9f9;\n  }\n}\n"
  },
  {
    "path": "Video 118/src/main.jsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App.jsx'\nimport './index.css'\n\nReactDOM.createRoot(document.getElementById('root')).render(\n \n    <App /> \n)\n"
  },
  {
    "path": "Video 118/vite.config.js",
    "content": "import { defineConfig } from 'vite'\nimport react from '@vitejs/plugin-react'\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n  plugins: [react()],\n})\n"
  },
  {
    "path": "Video 119/.eslintrc.cjs",
    "content": "module.exports = {\n  root: true,\n  env: { browser: true, es2020: true },\n  extends: [\n    'eslint:recommended',\n    'plugin:react/recommended',\n    'plugin:react/jsx-runtime',\n    'plugin:react-hooks/recommended',\n  ],\n  ignorePatterns: ['dist', '.eslintrc.cjs'],\n  parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },\n  settings: { react: { version: '18.2' } },\n  plugins: ['react-refresh'],\n  rules: {\n    'react/jsx-no-target-blank': 'off',\n    'react-refresh/only-export-components': [\n      'warn',\n      { allowConstantExport: true },\n    ],\n  },\n}\n"
  },
  {
    "path": "Video 119/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n"
  },
  {
    "path": "Video 119/README.md",
    "content": "# React + Vite\n\nThis template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.\n\nCurrently, two official plugins are available:\n\n- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh\n- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh\n"
  },
  {
    "path": "Video 119/backend/server.js",
    "content": "import express  from \"express\"\nimport cors from \"cors\"\nimport bodyParser from \"body-parser\"\nconst app = express()\nconst port = 3000\n\napp.use(cors()) \napp.use(bodyParser.json())\n\napp.get('/', (req, res) => { \n    res.send('Hello World!')\n})\n\napp.post('/', (req, res) => { \n    console.log(req.body)\n    res.send('Hello World!')\n})\n\napp.listen(port, () => {\n    console.log(`Example app listening on port ${port}`)\n})"
  },
  {
    "path": "Video 119/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" type=\"image/svg+xml\" href=\"/vite.svg\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Vite + React</title>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script type=\"module\" src=\"/src/main.jsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "Video 119/package.json",
    "content": "{\n  \"name\": \"video-119\",\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"vite build\",\n    \"lint\": \"eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0\",\n    \"preview\": \"vite preview\"\n  },\n  \"dependencies\": {\n    \"body-parser\": \"^1.20.2\",\n    \"cors\": \"^2.8.5\",\n    \"express\": \"^4.18.2\",\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\",\n    \"react-hook-form\": \"^7.50.1\"\n  },\n  \"devDependencies\": {\n    \"@types/react\": \"^18.2.55\",\n    \"@types/react-dom\": \"^18.2.19\",\n    \"@vitejs/plugin-react\": \"^4.2.1\",\n    \"eslint\": \"^8.56.0\",\n    \"eslint-plugin-react\": \"^7.33.2\",\n    \"eslint-plugin-react-hooks\": \"^4.6.0\",\n    \"eslint-plugin-react-refresh\": \"^0.4.5\",\n    \"vite\": \"^5.1.0\"\n  }\n}\n"
  },
  {
    "path": "Video 119/src/App.css",
    "content": "#root {\n  max-width: 1280px;\n  margin: 0 auto;\n  padding: 2rem;\n  text-align: center;\n}\n\n.red{\n  color: red;\n  font-size: 12px;\n}\n\n.logo {\n  height: 6em;\n  padding: 1.5em;\n  will-change: filter;\n  transition: filter 300ms;\n}\n.logo:hover {\n  filter: drop-shadow(0 0 2em #646cffaa);\n}\n.logo.react:hover {\n  filter: drop-shadow(0 0 2em #61dafbaa);\n}\n\n@keyframes logo-spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  a:nth-of-type(2) .logo {\n    animation: logo-spin infinite 20s linear;\n  }\n}\n\n.card {\n  padding: 2em;\n}\n\n.read-the-docs {\n  color: #888;\n}\n"
  },
  {
    "path": "Video 119/src/App.jsx",
    "content": "import { useState } from 'react' \nimport './App.css'\nimport { useForm } from \"react-hook-form\"\n \n \n\nfunction App() { \n  const {\n    register,\n    handleSubmit,\n    setError,    \n    formState: { errors, isSubmitting },\n  } = useForm();\n\n  const delay = (d)=>{\n    return new Promise((resolve, reject)=>{\n      setTimeout(() => {\n        resolve()\n      }, d * 1000);\n    })\n  }\n\n  const onSubmit = async (data) => {\n    // await delay(2) // simulating network delay\n    let r = await fetch(\"http://localhost:3000/\", {method: \"POST\",  headers: {\n      \"Content-Type\": \"application/json\", \n    }, body: JSON.stringify(data)})\n    let res = await r.text()\n    console.log(data, res)\n    // if(data.username !== \"shubham\"){\n    //   setError(\"myform\", {message: \"Your form is not in good order because credentials are invalid\"})\n    // }\n    // if(data.username === \"rohan\"){\n    //   setError(\"blocked\", {message: \"Sorry this user is blocked\"})\n    // }\n  }\n\n  return (\n    <> \n    {isSubmitting && <div>Loading...</div>}\n       <div className=\"container\">\n        <form action=\"\" onSubmit={handleSubmit(onSubmit)}>\n          <input placeholder='username' {...register(\"username\", { required: {value: true, message: \"This field is required\"}, minLength: {value: 3, message: \"Min length is 3\"}, maxLength: {value: 8, message: \"Max length is 8\"} })} type=\"text\"   />\n          {errors.username && <div className='red'>{errors.username.message}</div>}\n          <br />\n          <input placeholder='password'  {...register(\"password\", {minLength: {value: 7, message: \"Min length of password is 7\"},})} type=\"password\"/>\n          {errors.password && <div className='red'>{errors.password.message}</div>}\n          <br />\n          <input disabled={isSubmitting} type=\"submit\" value=\"Submit\" />\n          {errors.myform && <div className='red'>{errors.myform.message}</div>}\n          {errors.blocked && <div className='red'>{errors.blocked.message}</div>}\n        </form>\n       </div>\n    </>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "Video 119/src/index.css",
    "content": ":root {\n  font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;\n  line-height: 1.5;\n  font-weight: 400;\n\n  color-scheme: light dark;\n  color: rgba(255, 255, 255, 0.87);\n  background-color: #242424;\n\n  font-synthesis: none;\n  text-rendering: optimizeLegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\na {\n  font-weight: 500;\n  color: #646cff;\n  text-decoration: inherit;\n}\na:hover {\n  color: #535bf2;\n}\n\nbody {\n  margin: 0;\n  display: flex;\n  place-items: center;\n  min-width: 320px;\n  min-height: 100vh;\n}\n\nh1 {\n  font-size: 3.2em;\n  line-height: 1.1;\n}\n\nbutton {\n  border-radius: 8px;\n  border: 1px solid transparent;\n  padding: 0.6em 1.2em;\n  font-size: 1em;\n  font-weight: 500;\n  font-family: inherit;\n  background-color: #1a1a1a;\n  cursor: pointer;\n  transition: border-color 0.25s;\n}\nbutton:hover {\n  border-color: #646cff;\n}\nbutton:focus,\nbutton:focus-visible {\n  outline: 4px auto -webkit-focus-ring-color;\n}\n\n@media (prefers-color-scheme: light) {\n  :root {\n    color: #213547;\n    background-color: #ffffff;\n  }\n  a:hover {\n    color: #747bff;\n  }\n  button {\n    background-color: #f9f9f9;\n  }\n}\n"
  },
  {
    "path": "Video 119/src/main.jsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App.jsx'\nimport './index.css'\n\nReactDOM.createRoot(document.getElementById('root')).render(\n  <React.StrictMode>\n    <App />\n  </React.StrictMode>,\n)\n"
  },
  {
    "path": "Video 119/vite.config.js",
    "content": "import { defineConfig } from 'vite'\nimport react from '@vitejs/plugin-react'\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n  plugins: [react()],\n})\n"
  },
  {
    "path": "Video 12/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n<body>\n    <!-- You are given 12 files; 6 audio and 6 video.\n    Design a website using HTML only which shows these 12 files.\n    1.mp3, 2.mp3 .... 6.mp3\n    1.mp4, 2.mp4 .... 6.mp4 -->\n\n\n</body>\n</html>"
  },
  {
    "path": "Video 120/.eslintrc.cjs",
    "content": "module.exports = {\n  root: true,\n  env: { browser: true, es2020: true },\n  extends: [\n    'eslint:recommended',\n    'plugin:react/recommended',\n    'plugin:react/jsx-runtime',\n    'plugin:react-hooks/recommended',\n  ],\n  ignorePatterns: ['dist', '.eslintrc.cjs'],\n  parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },\n  settings: { react: { version: '18.2' } },\n  plugins: ['react-refresh'],\n  rules: {\n    'react/jsx-no-target-blank': 'off',\n    'react-refresh/only-export-components': [\n      'warn',\n      { allowConstantExport: true },\n    ],\n  },\n}\n"
  },
  {
    "path": "Video 120/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n"
  },
  {
    "path": "Video 120/README.md",
    "content": "# React + Vite\n\nThis template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.\n\nCurrently, two official plugins are available:\n\n- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh\n- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh\n"
  },
  {
    "path": "Video 120/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" type=\"image/svg+xml\" href=\"/vite.svg\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Vite + React</title>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script type=\"module\" src=\"/src/main.jsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "Video 120/package.json",
    "content": "{\n  \"name\": \"video-120\",\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"vite build\",\n    \"lint\": \"eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0\",\n    \"preview\": \"vite preview\"\n  },\n  \"dependencies\": {\n    \"@reduxjs/toolkit\": \"^2.2.1\",\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\",\n    \"react-redux\": \"^9.1.0\"\n  },\n  \"devDependencies\": {\n    \"@types/react\": \"^18.2.56\",\n    \"@types/react-dom\": \"^18.2.19\",\n    \"@vitejs/plugin-react\": \"^4.2.1\",\n    \"eslint\": \"^8.56.0\",\n    \"eslint-plugin-react\": \"^7.33.2\",\n    \"eslint-plugin-react-hooks\": \"^4.6.0\",\n    \"eslint-plugin-react-refresh\": \"^0.4.5\",\n    \"vite\": \"^5.1.4\"\n  }\n}\n"
  },
  {
    "path": "Video 120/src/App.css",
    "content": "#root {\n  max-width: 1280px;\n  margin: 0 auto;\n  padding: 2rem;\n  text-align: center;\n}\n\n.logo {\n  height: 6em;\n  padding: 1.5em;\n  will-change: filter;\n  transition: filter 300ms;\n}\n.logo:hover {\n  filter: drop-shadow(0 0 2em #646cffaa);\n}\n.logo.react:hover {\n  filter: drop-shadow(0 0 2em #61dafbaa);\n}\n\n@keyframes logo-spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  a:nth-of-type(2) .logo {\n    animation: logo-spin infinite 20s linear;\n  }\n}\n\n.card {\n  padding: 2em;\n}\n\n.read-the-docs {\n  color: #888;\n}\n"
  },
  {
    "path": "Video 120/src/App.jsx",
    "content": "import { useState } from 'react'\nimport reactLogo from './assets/react.svg'\nimport viteLogo from '/vite.svg'\nimport './App.css'\nimport Navbar from './components/Navbar'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { decrement, increment, multiply } from './redux/counter/counterSlice'\n\nfunction App() { \n  const count = useSelector((state) => state.counter.value)\n  const dispatch = useDispatch()\n\n  return (\n    <>\n      <Navbar />\n      <div>\n        <button onClick={() => dispatch(decrement())}>-</button>\n        Currently count is {count}\n        <button onClick={() => dispatch(increment())}>+</button>\n        <button onClick={() => dispatch(multiply())}>*</button>\n      </div>\n\n    </>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "Video 120/src/components/Navbar.jsx",
    "content": "import React from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\n\nconst Navbar = () => {\n  const count = useSelector((state) => state.counter.value)\n\n  return (\n    <div>\n      I am a navbar and counter is {count}\n    </div>\n  )\n}\n\nexport default Navbar\n"
  },
  {
    "path": "Video 120/src/index.css",
    "content": ":root {\n  font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;\n  line-height: 1.5;\n  font-weight: 400;\n\n  color-scheme: light dark;\n  color: rgba(255, 255, 255, 0.87);\n  background-color: #242424;\n\n  font-synthesis: none;\n  text-rendering: optimizeLegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\na {\n  font-weight: 500;\n  color: #646cff;\n  text-decoration: inherit;\n}\na:hover {\n  color: #535bf2;\n}\n\nbody {\n  margin: 0;\n  display: flex;\n  place-items: center;\n  min-width: 320px;\n  min-height: 100vh;\n}\n\nh1 {\n  font-size: 3.2em;\n  line-height: 1.1;\n}\n\nbutton {\n  border-radius: 8px;\n  border: 1px solid transparent;\n  padding: 0.6em 1.2em;\n  font-size: 1em;\n  font-weight: 500;\n  font-family: inherit;\n  background-color: #1a1a1a;\n  cursor: pointer;\n  transition: border-color 0.25s;\n}\nbutton:hover {\n  border-color: #646cff;\n}\nbutton:focus,\nbutton:focus-visible {\n  outline: 4px auto -webkit-focus-ring-color;\n}\n\n@media (prefers-color-scheme: light) {\n  :root {\n    color: #213547;\n    background-color: #ffffff;\n  }\n  a:hover {\n    color: #747bff;\n  }\n  button {\n    background-color: #f9f9f9;\n  }\n}\n"
  },
  {
    "path": "Video 120/src/main.jsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App.jsx'\nimport './index.css'\nimport {store} from \"./redux/store.js\"\nimport { Provider } from 'react-redux'\n\nReactDOM.createRoot(document.getElementById('root')).render(\n  <React.StrictMode>\n    <Provider store={store}>\n    <App />\n    </Provider>\n  </React.StrictMode>,\n)\n"
  },
  {
    "path": "Video 120/src/redux/counter/counterSlice.js",
    "content": "import { createSlice } from '@reduxjs/toolkit'\n\nconst initialState = {\n  value: 0,\n}\n\nexport const counterSlice = createSlice({\n  name: 'counter',\n  initialState,\n  reducers: {\n    increment: (state) => {\n      // Redux Toolkit allows us to write \"mutating\" logic in reducers. It\n      // doesn't actually mutate the state because it uses the Immer library,\n      // which detects changes to a \"draft state\" and produces a brand new\n      // immutable state based off those changes\n      state.value += 1\n    },\n    decrement: (state) => {\n      state.value -= 1\n    },\n    incrementByAmount: (state, action) => {\n      state.value += action.payload\n    },\n    multiply: (state)=>{\n        state.value *=2\n    }\n  },\n})\n\n// Action creators are generated for each case reducer function\nexport const { increment, decrement, incrementByAmount, multiply } = counterSlice.actions\n\nexport default counterSlice.reducer"
  },
  {
    "path": "Video 120/src/redux/store.js",
    "content": "import { configureStore } from '@reduxjs/toolkit'\nimport counterReducer from \"./counter/counterSlice\"\n\nexport const store = configureStore({\n    reducer: {\n        counter: counterReducer,\n    },\n})\n\n// https://stackoverflow.com/questions/54385323/what-is-a-difference-between-action-reducer-and-store-in-redux"
  },
  {
    "path": "Video 120/vite.config.js",
    "content": "import { defineConfig } from 'vite'\nimport react from '@vitejs/plugin-react'\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n  plugins: [react()],\n})\n"
  },
  {
    "path": "Video 121/first/.eslintrc.json",
    "content": "{\n  \"extends\": \"next/core-web-vitals\"\n}\n"
  },
  {
    "path": "Video 121/first/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n.yarn/install-state.gz\n\n# testing\n/coverage\n\n# next.js\n/.next/\n/out/\n\n# production\n/build\n\n# misc\n.DS_Store\n*.pem\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# local env files\n.env*.local\n\n# vercel\n.vercel\n\n# typescript\n*.tsbuildinfo\nnext-env.d.ts\n"
  },
  {
    "path": "Video 121/first/README.md",
    "content": "This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).\n\n## Getting Started\n\nFirst, run the development server:\n\n```bash\nnpm run dev\n# or\nyarn dev\n# or\npnpm dev\n# or\nbun dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) with your browser to see the result.\n\nYou can start editing the page by modifying `app/page.js`. The page auto-updates as you edit the file.\n\nThis project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.\n\n## Learn More\n\nTo learn more about Next.js, take a look at the following resources:\n\n- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.\n- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.\n\nYou can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!\n\n## Deploy on Vercel\n\nThe easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.\n\nCheck out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.\n"
  },
  {
    "path": "Video 121/first/app/about/page.js",
    "content": "import React from 'react'\n\nconst page = () => {\n  return (\n    <div>\n     <h1 className=\"text-xl\">Problems solved by Next.js</h1>\n     <ul>\n        <li>Full Stack Solution</li>\n        <li>File based Routing</li>\n        <li>Additional features like router from next/navigation</li>\n        <li>Optimized rendering</li>\n     </ul>\n    </div>\n  )\n}\n\nexport default page\n"
  },
  {
    "path": "Video 121/first/app/contact/page.js",
    "content": "import React from 'react'\n\nconst contact = () => {\n  return (\n    <div>\n      I am contact\n    </div>\n  )\n}\n\nexport default contact\n"
  },
  {
    "path": "Video 121/first/app/globals.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n:root {\n  --foreground-rgb: 0, 0, 0;\n  --background-start-rgb: 214, 219, 220;\n  --background-end-rgb: 255, 255, 255;\n}\n\n@media (prefers-color-scheme: dark) {\n  :root {\n    --foreground-rgb: 255, 255, 255;\n    --background-start-rgb: 0, 0, 0;\n    --background-end-rgb: 0, 0, 0;\n  }\n}\n\nbody {\n  color: rgb(var(--foreground-rgb));\n  background: linear-gradient(\n      to bottom,\n      transparent,\n      rgb(var(--background-end-rgb))\n    )\n    rgb(var(--background-start-rgb));\n}\n\n@layer utilities {\n  .text-balance {\n    text-wrap: balance;\n  }\n}\n"
  },
  {
    "path": "Video 121/first/app/layout.js",
    "content": "import { Inter } from \"next/font/google\";\nimport \"./globals.css\";\nimport Navbar from \"@/component/Navbar\";\n\nconst inter = Inter({ subsets: [\"latin\"] });\n\nexport const metadata = {\n  title: \"Blog\",\n  description: \"I am a blog\",\n};\n\nexport default function RootLayout({ children }) {\n  return (\n    <html lang=\"en\">\n      <body className={inter.className}>\n        <Navbar/>\n        {children}\n        </body>\n    </html>\n  );\n}\n"
  },
  {
    "path": "Video 121/first/app/page.js",
    "content": "import React from 'react'\n\nconst page = () => {\n  return (\n    <div>\n      <div>I am homepage</div>\n    </div>\n  )\n}\n\nexport default page\n"
  },
  {
    "path": "Video 121/first/component/Navbar.js",
    "content": "import React from 'react'\n\nconst Navbar = () => {\n  return (\n    <div>\n      I am navbar\n    </div>\n  )\n}\n\nexport default Navbar\n"
  },
  {
    "path": "Video 121/first/jsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"paths\": {\n      \"@/*\": [\"./*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "Video 121/first/next.config.mjs",
    "content": "/** @type {import('next').NextConfig} */\nconst nextConfig = {};\n\nexport default nextConfig;\n"
  },
  {
    "path": "Video 121/first/package.json",
    "content": "{\n  \"name\": \"first\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"build\": \"next build\",\n    \"start\": \"next start\",\n    \"lint\": \"next lint\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18\",\n    \"react-dom\": \"^18\",\n    \"next\": \"14.1.0\"\n  },\n  \"devDependencies\": {\n    \"autoprefixer\": \"^10.0.1\",\n    \"postcss\": \"^8\",\n    \"tailwindcss\": \"^3.3.0\",\n    \"eslint\": \"^8\",\n    \"eslint-config-next\": \"14.1.0\"\n  }\n}\n"
  },
  {
    "path": "Video 121/first/postcss.config.js",
    "content": "module.exports = {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {},\n  },\n};\n"
  },
  {
    "path": "Video 121/first/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\n    \"./pages/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./components/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./app/**/*.{js,ts,jsx,tsx,mdx}\",\n  ],\n  theme: {\n    extend: {\n      backgroundImage: {\n        \"gradient-radial\": \"radial-gradient(var(--tw-gradient-stops))\",\n        \"gradient-conic\":\n          \"conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))\",\n      },\n    },\n  },\n  plugins: [],\n};\n"
  },
  {
    "path": "Video 122/my-app/.eslintrc.json",
    "content": "{\n  \"extends\": \"next/core-web-vitals\"\n}\n"
  },
  {
    "path": "Video 122/my-app/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n.yarn/install-state.gz\n\n# testing\n/coverage\n\n# next.js\n/.next/\n/out/\n\n# production\n/build\n\n# misc\n.DS_Store\n*.pem\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# local env files\n.env*.local\n\n# vercel\n.vercel\n\n# typescript\n*.tsbuildinfo\nnext-env.d.ts\n"
  },
  {
    "path": "Video 122/my-app/README.md",
    "content": "This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).\n\n## Getting Started\n\nFirst, run the development server:\n\n```bash\nnpm run dev\n# or\nyarn dev\n# or\npnpm dev\n# or\nbun dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) with your browser to see the result.\n\nYou can start editing the page by modifying `app/page.js`. The page auto-updates as you edit the file.\n\nThis project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.\n\n## Learn More\n\nTo learn more about Next.js, take a look at the following resources:\n\n- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.\n- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.\n\nYou can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!\n\n## Deploy on Vercel\n\nThe easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.\n\nCheck out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.\n"
  },
  {
    "path": "Video 122/my-app/app/globals.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n:root {\n  --foreground-rgb: 0, 0, 0;\n  --background-start-rgb: 214, 219, 220;\n  --background-end-rgb: 255, 255, 255;\n}\n\n@media (prefers-color-scheme: dark) {\n  :root {\n    --foreground-rgb: 255, 255, 255;\n    --background-start-rgb: 0, 0, 0;\n    --background-end-rgb: 0, 0, 0;\n  }\n}\n\nbody {\n  color: rgb(var(--foreground-rgb));\n  background: linear-gradient(\n      to bottom,\n      transparent,\n      rgb(var(--background-end-rgb))\n    )\n    rgb(var(--background-start-rgb));\n}\n\n@layer utilities {\n  .text-balance {\n    text-wrap: balance;\n  }\n}\n"
  },
  {
    "path": "Video 122/my-app/app/layout.js",
    "content": "import { Inter } from \"next/font/google\";\nimport \"./globals.css\";\n\nconst inter = Inter({ subsets: [\"latin\"] });\n\nexport const metadata = {\n  title: \"Create Next App\",\n  description: \"Generated by create next app\",\n};\n\nexport default function RootLayout({ children }) {\n  return (\n    <html lang=\"en\">\n      <body className={inter.className}>{children}</body>\n    </html>\n  );\n}\n"
  },
  {
    "path": "Video 122/my-app/app/page.js",
    "content": "// import { useState, useEffect } from \"react\";\nimport fs from \"fs/promises\"\nimport Navbar from \"@/components/Navbar\"\n\nexport default function Home() {\n  // const [count, setCount] = useState(0)\n  console.log(\"Hey I am harry\")\n  let a = fs.readFile(\".gitignore\")\n  a.then(e=>{console.log(e.toString())})\n  return (\n   <div>\n    <Navbar/>\n    I am a component \n    {/* {count} */}\n    {/* <button onClick={()=> setCount(count + 1)}>Click me</button> */}\n   </div>\n  );\n}\n"
  },
  {
    "path": "Video 122/my-app/components/Navbar.js",
    "content": "\"use client\"\nimport React from 'react'\n\nconst Navbar = () => {\n  return (\n    <div>\n      navbar\n    </div>\n  )\n}\n\nexport default Navbar\n"
  },
  {
    "path": "Video 122/my-app/data.json",
    "content": "[\n    {\n    \"userId\": 1,\n    \"id\": 1,\n    \"title\": \"delectus aut autem\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 1,\n    \"id\": 2,\n    \"title\": \"quis ut nam facilis et officia qui\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 1,\n    \"id\": 3,\n    \"title\": \"fugiat veniam minus\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 1,\n    \"id\": 4,\n    \"title\": \"et porro tempora\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 1,\n    \"id\": 5,\n    \"title\": \"laboriosam mollitia et enim quasi adipisci quia provident illum\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 1,\n    \"id\": 6,\n    \"title\": \"qui ullam ratione quibusdam voluptatem quia omnis\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 1,\n    \"id\": 7,\n    \"title\": \"illo expedita consequatur quia in\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 1,\n    \"id\": 8,\n    \"title\": \"quo adipisci enim quam ut ab\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 1,\n    \"id\": 9,\n    \"title\": \"molestiae perspiciatis ipsa\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 1,\n    \"id\": 10,\n    \"title\": \"illo est ratione doloremque quia maiores aut\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 1,\n    \"id\": 11,\n    \"title\": \"vero rerum temporibus dolor\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 1,\n    \"id\": 12,\n    \"title\": \"ipsa repellendus fugit nisi\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 1,\n    \"id\": 13,\n    \"title\": \"et doloremque nulla\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 1,\n    \"id\": 14,\n    \"title\": \"repellendus sunt dolores architecto voluptatum\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 1,\n    \"id\": 15,\n    \"title\": \"ab voluptatum amet voluptas\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 1,\n    \"id\": 16,\n    \"title\": \"accusamus eos facilis sint et aut voluptatem\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 1,\n    \"id\": 17,\n    \"title\": \"quo laboriosam deleniti aut qui\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 1,\n    \"id\": 18,\n    \"title\": \"dolorum est consequatur ea mollitia in culpa\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 1,\n    \"id\": 19,\n    \"title\": \"molestiae ipsa aut voluptatibus pariatur dolor nihil\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 1,\n    \"id\": 20,\n    \"title\": \"ullam nobis libero sapiente ad optio sint\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 2,\n    \"id\": 21,\n    \"title\": \"suscipit repellat esse quibusdam voluptatem incidunt\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 2,\n    \"id\": 22,\n    \"title\": \"distinctio vitae autem nihil ut molestias quo\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 2,\n    \"id\": 23,\n    \"title\": \"et itaque necessitatibus maxime molestiae qui quas velit\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 2,\n    \"id\": 24,\n    \"title\": \"adipisci non ad dicta qui amet quaerat doloribus ea\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 2,\n    \"id\": 25,\n    \"title\": \"voluptas quo tenetur perspiciatis explicabo natus\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 2,\n    \"id\": 26,\n    \"title\": \"aliquam aut quasi\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 2,\n    \"id\": 27,\n    \"title\": \"veritatis pariatur delectus\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 2,\n    \"id\": 28,\n    \"title\": \"nesciunt totam sit blanditiis sit\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 2,\n    \"id\": 29,\n    \"title\": \"laborum aut in quam\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 2,\n    \"id\": 30,\n    \"title\": \"nemo perspiciatis repellat ut dolor libero commodi blanditiis omnis\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 2,\n    \"id\": 31,\n    \"title\": \"repudiandae totam in est sint facere fuga\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 2,\n    \"id\": 32,\n    \"title\": \"earum doloribus ea doloremque quis\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 2,\n    \"id\": 33,\n    \"title\": \"sint sit aut vero\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 2,\n    \"id\": 34,\n    \"title\": \"porro aut necessitatibus eaque distinctio\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 2,\n    \"id\": 35,\n    \"title\": \"repellendus veritatis molestias dicta incidunt\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 2,\n    \"id\": 36,\n    \"title\": \"excepturi deleniti adipisci voluptatem et neque optio illum ad\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 2,\n    \"id\": 37,\n    \"title\": \"sunt cum tempora\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 2,\n    \"id\": 38,\n    \"title\": \"totam quia non\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 2,\n    \"id\": 39,\n    \"title\": \"doloremque quibusdam asperiores libero corrupti illum qui omnis\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 2,\n    \"id\": 40,\n    \"title\": \"totam atque quo nesciunt\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 3,\n    \"id\": 41,\n    \"title\": \"aliquid amet impedit consequatur aspernatur placeat eaque fugiat suscipit\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 3,\n    \"id\": 42,\n    \"title\": \"rerum perferendis error quia ut eveniet\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 3,\n    \"id\": 43,\n    \"title\": \"tempore ut sint quis recusandae\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 3,\n    \"id\": 44,\n    \"title\": \"cum debitis quis accusamus doloremque ipsa natus sapiente omnis\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 3,\n    \"id\": 45,\n    \"title\": \"velit soluta adipisci molestias reiciendis harum\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 3,\n    \"id\": 46,\n    \"title\": \"vel voluptatem repellat nihil placeat corporis\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 3,\n    \"id\": 47,\n    \"title\": \"nam qui rerum fugiat accusamus\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 3,\n    \"id\": 48,\n    \"title\": \"sit reprehenderit omnis quia\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 3,\n    \"id\": 49,\n    \"title\": \"ut necessitatibus aut maiores debitis officia blanditiis velit et\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 3,\n    \"id\": 50,\n    \"title\": \"cupiditate necessitatibus ullam aut quis dolor voluptate\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 3,\n    \"id\": 51,\n    \"title\": \"distinctio exercitationem ab doloribus\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 3,\n    \"id\": 52,\n    \"title\": \"nesciunt dolorum quis recusandae ad pariatur ratione\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 3,\n    \"id\": 53,\n    \"title\": \"qui labore est occaecati recusandae aliquid quam\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 3,\n    \"id\": 54,\n    \"title\": \"quis et est ut voluptate quam dolor\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 3,\n    \"id\": 55,\n    \"title\": \"voluptatum omnis minima qui occaecati provident nulla voluptatem ratione\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 3,\n    \"id\": 56,\n    \"title\": \"deleniti ea temporibus enim\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 3,\n    \"id\": 57,\n    \"title\": \"pariatur et magnam ea doloribus similique voluptatem rerum quia\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 3,\n    \"id\": 58,\n    \"title\": \"est dicta totam qui explicabo doloribus qui dignissimos\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 3,\n    \"id\": 59,\n    \"title\": \"perspiciatis velit id laborum placeat iusto et aliquam odio\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 3,\n    \"id\": 60,\n    \"title\": \"et sequi qui architecto ut adipisci\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 4,\n    \"id\": 61,\n    \"title\": \"odit optio omnis qui sunt\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 4,\n    \"id\": 62,\n    \"title\": \"et placeat et tempore aspernatur sint numquam\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 4,\n    \"id\": 63,\n    \"title\": \"doloremque aut dolores quidem fuga qui nulla\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 4,\n    \"id\": 64,\n    \"title\": \"voluptas consequatur qui ut quia magnam nemo esse\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 4,\n    \"id\": 65,\n    \"title\": \"fugiat pariatur ratione ut asperiores necessitatibus magni\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 4,\n    \"id\": 66,\n    \"title\": \"rerum eum molestias autem voluptatum sit optio\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 4,\n    \"id\": 67,\n    \"title\": \"quia voluptatibus voluptatem quos similique maiores repellat\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 4,\n    \"id\": 68,\n    \"title\": \"aut id perspiciatis voluptatem iusto\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 4,\n    \"id\": 69,\n    \"title\": \"doloribus sint dolorum ab adipisci itaque dignissimos aliquam suscipit\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 4,\n    \"id\": 70,\n    \"title\": \"ut sequi accusantium et mollitia delectus sunt\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 4,\n    \"id\": 71,\n    \"title\": \"aut velit saepe ullam\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 4,\n    \"id\": 72,\n    \"title\": \"praesentium facilis facere quis harum voluptatibus voluptatem eum\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 4,\n    \"id\": 73,\n    \"title\": \"sint amet quia totam corporis qui exercitationem commodi\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 4,\n    \"id\": 74,\n    \"title\": \"expedita tempore nobis eveniet laborum maiores\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 4,\n    \"id\": 75,\n    \"title\": \"occaecati adipisci est possimus totam\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 4,\n    \"id\": 76,\n    \"title\": \"sequi dolorem sed\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 4,\n    \"id\": 77,\n    \"title\": \"maiores aut nesciunt delectus exercitationem vel assumenda eligendi at\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 4,\n    \"id\": 78,\n    \"title\": \"reiciendis est magnam amet nemo iste recusandae impedit quaerat\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 4,\n    \"id\": 79,\n    \"title\": \"eum ipsa maxime ut\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 4,\n    \"id\": 80,\n    \"title\": \"tempore molestias dolores rerum sequi voluptates ipsum consequatur\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 5,\n    \"id\": 81,\n    \"title\": \"suscipit qui totam\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 5,\n    \"id\": 82,\n    \"title\": \"voluptates eum voluptas et dicta\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 5,\n    \"id\": 83,\n    \"title\": \"quidem at rerum quis ex aut sit quam\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 5,\n    \"id\": 84,\n    \"title\": \"sunt veritatis ut voluptate\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 5,\n    \"id\": 85,\n    \"title\": \"et quia ad iste a\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 5,\n    \"id\": 86,\n    \"title\": \"incidunt ut saepe autem\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 5,\n    \"id\": 87,\n    \"title\": \"laudantium quae eligendi consequatur quia et vero autem\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 5,\n    \"id\": 88,\n    \"title\": \"vitae aut excepturi laboriosam sint aliquam et et accusantium\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 5,\n    \"id\": 89,\n    \"title\": \"sequi ut omnis et\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 5,\n    \"id\": 90,\n    \"title\": \"molestiae nisi accusantium tenetur dolorem et\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 5,\n    \"id\": 91,\n    \"title\": \"nulla quis consequatur saepe qui id expedita\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 5,\n    \"id\": 92,\n    \"title\": \"in omnis laboriosam\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 5,\n    \"id\": 93,\n    \"title\": \"odio iure consequatur molestiae quibusdam necessitatibus quia sint\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 5,\n    \"id\": 94,\n    \"title\": \"facilis modi saepe mollitia\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 5,\n    \"id\": 95,\n    \"title\": \"vel nihil et molestiae iusto assumenda nemo quo ut\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 5,\n    \"id\": 96,\n    \"title\": \"nobis suscipit ducimus enim asperiores voluptas\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 5,\n    \"id\": 97,\n    \"title\": \"dolorum laboriosam eos qui iure aliquam\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 5,\n    \"id\": 98,\n    \"title\": \"debitis accusantium ut quo facilis nihil quis sapiente necessitatibus\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 5,\n    \"id\": 99,\n    \"title\": \"neque voluptates ratione\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 5,\n    \"id\": 100,\n    \"title\": \"excepturi a et neque qui expedita vel voluptate\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 6,\n    \"id\": 101,\n    \"title\": \"explicabo enim cumque porro aperiam occaecati minima\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 6,\n    \"id\": 102,\n    \"title\": \"sed ab consequatur\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 6,\n    \"id\": 103,\n    \"title\": \"non sunt delectus illo nulla tenetur enim omnis\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 6,\n    \"id\": 104,\n    \"title\": \"excepturi non laudantium quo\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 6,\n    \"id\": 105,\n    \"title\": \"totam quia dolorem et illum repellat voluptas optio\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 6,\n    \"id\": 106,\n    \"title\": \"ad illo quis voluptatem temporibus\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 6,\n    \"id\": 107,\n    \"title\": \"praesentium facilis omnis laudantium fugit ad iusto nihil nesciunt\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 6,\n    \"id\": 108,\n    \"title\": \"a eos eaque nihil et exercitationem incidunt delectus\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 6,\n    \"id\": 109,\n    \"title\": \"autem temporibus harum quisquam in culpa\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 6,\n    \"id\": 110,\n    \"title\": \"aut aut ea corporis\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 6,\n    \"id\": 111,\n    \"title\": \"magni accusantium labore et id quis provident\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 6,\n    \"id\": 112,\n    \"title\": \"consectetur impedit quisquam qui deserunt non rerum consequuntur eius\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 6,\n    \"id\": 113,\n    \"title\": \"quia atque aliquam sunt impedit voluptatum rerum assumenda nisi\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 6,\n    \"id\": 114,\n    \"title\": \"cupiditate quos possimus corporis quisquam exercitationem beatae\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 6,\n    \"id\": 115,\n    \"title\": \"sed et ea eum\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 6,\n    \"id\": 116,\n    \"title\": \"ipsa dolores vel facilis ut\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 6,\n    \"id\": 117,\n    \"title\": \"sequi quae est et qui qui eveniet asperiores\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 6,\n    \"id\": 118,\n    \"title\": \"quia modi consequatur vero fugiat\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 6,\n    \"id\": 119,\n    \"title\": \"corporis ducimus ea perspiciatis iste\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 6,\n    \"id\": 120,\n    \"title\": \"dolorem laboriosam vel voluptas et aliquam quasi\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 7,\n    \"id\": 121,\n    \"title\": \"inventore aut nihil minima laudantium hic qui omnis\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 7,\n    \"id\": 122,\n    \"title\": \"provident aut nobis culpa\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 7,\n    \"id\": 123,\n    \"title\": \"esse et quis iste est earum aut impedit\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 7,\n    \"id\": 124,\n    \"title\": \"qui consectetur id\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 7,\n    \"id\": 125,\n    \"title\": \"aut quasi autem iste tempore illum possimus\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 7,\n    \"id\": 126,\n    \"title\": \"ut asperiores perspiciatis veniam ipsum rerum saepe\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 7,\n    \"id\": 127,\n    \"title\": \"voluptatem libero consectetur rerum ut\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 7,\n    \"id\": 128,\n    \"title\": \"eius omnis est qui voluptatem autem\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 7,\n    \"id\": 129,\n    \"title\": \"rerum culpa quis harum\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 7,\n    \"id\": 130,\n    \"title\": \"nulla aliquid eveniet harum laborum libero alias ut unde\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 7,\n    \"id\": 131,\n    \"title\": \"qui ea incidunt quis\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 7,\n    \"id\": 132,\n    \"title\": \"qui molestiae voluptatibus velit iure harum quisquam\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 7,\n    \"id\": 133,\n    \"title\": \"et labore eos enim rerum consequatur sunt\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 7,\n    \"id\": 134,\n    \"title\": \"molestiae doloribus et laborum quod ea\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 7,\n    \"id\": 135,\n    \"title\": \"facere ipsa nam eum voluptates reiciendis vero qui\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 7,\n    \"id\": 136,\n    \"title\": \"asperiores illo tempora fuga sed ut quasi adipisci\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 7,\n    \"id\": 137,\n    \"title\": \"qui sit non\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 7,\n    \"id\": 138,\n    \"title\": \"placeat minima consequatur rem qui ut\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 7,\n    \"id\": 139,\n    \"title\": \"consequatur doloribus id possimus voluptas a voluptatem\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 7,\n    \"id\": 140,\n    \"title\": \"aut consectetur in blanditiis deserunt quia sed laboriosam\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 8,\n    \"id\": 141,\n    \"title\": \"explicabo consectetur debitis voluptates quas quae culpa rerum non\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 8,\n    \"id\": 142,\n    \"title\": \"maiores accusantium architecto necessitatibus reiciendis ea aut\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 8,\n    \"id\": 143,\n    \"title\": \"eum non recusandae cupiditate animi\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 8,\n    \"id\": 144,\n    \"title\": \"ut eum exercitationem sint\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 8,\n    \"id\": 145,\n    \"title\": \"beatae qui ullam incidunt voluptatem non nisi aliquam\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 8,\n    \"id\": 146,\n    \"title\": \"molestiae suscipit ratione nihil odio libero impedit vero totam\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 8,\n    \"id\": 147,\n    \"title\": \"eum itaque quod reprehenderit et facilis dolor autem ut\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 8,\n    \"id\": 148,\n    \"title\": \"esse quas et quo quasi exercitationem\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 8,\n    \"id\": 149,\n    \"title\": \"animi voluptas quod perferendis est\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 8,\n    \"id\": 150,\n    \"title\": \"eos amet tempore laudantium fugit a\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 8,\n    \"id\": 151,\n    \"title\": \"accusamus adipisci dicta qui quo ea explicabo sed vero\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 8,\n    \"id\": 152,\n    \"title\": \"odit eligendi recusandae doloremque cumque non\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 8,\n    \"id\": 153,\n    \"title\": \"ea aperiam consequatur qui repellat eos\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 8,\n    \"id\": 154,\n    \"title\": \"rerum non ex sapiente\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 8,\n    \"id\": 155,\n    \"title\": \"voluptatem nobis consequatur et assumenda magnam\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 8,\n    \"id\": 156,\n    \"title\": \"nam quia quia nulla repellat assumenda quibusdam sit nobis\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 8,\n    \"id\": 157,\n    \"title\": \"dolorem veniam quisquam deserunt repellendus\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 8,\n    \"id\": 158,\n    \"title\": \"debitis vitae delectus et harum accusamus aut deleniti a\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 8,\n    \"id\": 159,\n    \"title\": \"debitis adipisci quibusdam aliquam sed dolore ea praesentium nobis\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 8,\n    \"id\": 160,\n    \"title\": \"et praesentium aliquam est\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 9,\n    \"id\": 161,\n    \"title\": \"ex hic consequuntur earum omnis alias ut occaecati culpa\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 9,\n    \"id\": 162,\n    \"title\": \"omnis laboriosam molestias animi sunt dolore\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 9,\n    \"id\": 163,\n    \"title\": \"natus corrupti maxime laudantium et voluptatem laboriosam odit\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 9,\n    \"id\": 164,\n    \"title\": \"reprehenderit quos aut aut consequatur est sed\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 9,\n    \"id\": 165,\n    \"title\": \"fugiat perferendis sed aut quidem\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 9,\n    \"id\": 166,\n    \"title\": \"quos quo possimus suscipit minima ut\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 9,\n    \"id\": 167,\n    \"title\": \"et quis minus quo a asperiores molestiae\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 9,\n    \"id\": 168,\n    \"title\": \"recusandae quia qui sunt libero\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 9,\n    \"id\": 169,\n    \"title\": \"ea odio perferendis officiis\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 9,\n    \"id\": 170,\n    \"title\": \"quisquam aliquam quia doloribus aut\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 9,\n    \"id\": 171,\n    \"title\": \"fugiat aut voluptatibus corrupti deleniti velit iste odio\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 9,\n    \"id\": 172,\n    \"title\": \"et provident amet rerum consectetur et voluptatum\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 9,\n    \"id\": 173,\n    \"title\": \"harum ad aperiam quis\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 9,\n    \"id\": 174,\n    \"title\": \"similique aut quo\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 9,\n    \"id\": 175,\n    \"title\": \"laudantium eius officia perferendis provident perspiciatis asperiores\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 9,\n    \"id\": 176,\n    \"title\": \"magni soluta corrupti ut maiores rem quidem\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 9,\n    \"id\": 177,\n    \"title\": \"et placeat temporibus voluptas est tempora quos quibusdam\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 9,\n    \"id\": 178,\n    \"title\": \"nesciunt itaque commodi tempore\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 9,\n    \"id\": 179,\n    \"title\": \"omnis consequuntur cupiditate impedit itaque ipsam quo\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 9,\n    \"id\": 180,\n    \"title\": \"debitis nisi et dolorem repellat et\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 10,\n    \"id\": 181,\n    \"title\": \"ut cupiditate sequi aliquam fuga maiores\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 10,\n    \"id\": 182,\n    \"title\": \"inventore saepe cumque et aut illum enim\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 10,\n    \"id\": 183,\n    \"title\": \"omnis nulla eum aliquam distinctio\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 10,\n    \"id\": 184,\n    \"title\": \"molestias modi perferendis perspiciatis\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 10,\n    \"id\": 185,\n    \"title\": \"voluptates dignissimos sed doloribus animi quaerat aut\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 10,\n    \"id\": 186,\n    \"title\": \"explicabo odio est et\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 10,\n    \"id\": 187,\n    \"title\": \"consequuntur animi possimus\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 10,\n    \"id\": 188,\n    \"title\": \"vel non beatae est\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 10,\n    \"id\": 189,\n    \"title\": \"culpa eius et voluptatem et\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 10,\n    \"id\": 190,\n    \"title\": \"accusamus sint iusto et voluptatem exercitationem\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 10,\n    \"id\": 191,\n    \"title\": \"temporibus atque distinctio omnis eius impedit tempore molestias pariatur\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 10,\n    \"id\": 192,\n    \"title\": \"ut quas possimus exercitationem sint voluptates\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 10,\n    \"id\": 193,\n    \"title\": \"rerum debitis voluptatem qui eveniet tempora distinctio a\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 10,\n    \"id\": 194,\n    \"title\": \"sed ut vero sit molestiae\",\n    \"completed\": false\n    },\n    {\n    \"userId\": 10,\n    \"id\": 195,\n    \"title\": \"rerum ex veniam mollitia voluptatibus pariatur\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 10,\n    \"id\": 196,\n    \"title\": \"consequuntur aut ut fugit similique\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 10,\n    \"id\": 197,\n    \"title\": \"dignissimos quo nobis earum saepe\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 10,\n    \"id\": 198,\n    \"title\": \"quis eius est sint explicabo\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 10,\n    \"id\": 199,\n    \"title\": \"numquam repellendus a magnam\",\n    \"completed\": true\n    },\n    {\n    \"userId\": 10,\n    \"id\": 200,\n    \"title\": \"ipsam aperiam voluptates qui\",\n    \"completed\": false\n    }\n    ]"
  },
  {
    "path": "Video 122/my-app/jsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"paths\": {\n      \"@/*\": [\"./*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "Video 122/my-app/next.config.mjs",
    "content": "/** @type {import('next').NextConfig} */\nconst nextConfig = {};\n\nexport default nextConfig;\n"
  },
  {
    "path": "Video 122/my-app/package.json",
    "content": "{\n  \"name\": \"my-app\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"build\": \"next build\",\n    \"start\": \"next start\",\n    \"lint\": \"next lint\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18\",\n    \"react-dom\": \"^18\",\n    \"next\": \"14.1.0\"\n  },\n  \"devDependencies\": {\n    \"autoprefixer\": \"^10.0.1\",\n    \"postcss\": \"^8\",\n    \"tailwindcss\": \"^3.3.0\",\n    \"eslint\": \"^8\",\n    \"eslint-config-next\": \"14.1.0\"\n  }\n}\n"
  },
  {
    "path": "Video 122/my-app/postcss.config.js",
    "content": "module.exports = {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {},\n  },\n};\n"
  },
  {
    "path": "Video 122/my-app/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\n    \"./pages/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./components/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./app/**/*.{js,ts,jsx,tsx,mdx}\",\n  ],\n  theme: {\n    extend: {\n      backgroundImage: {\n        \"gradient-radial\": \"radial-gradient(var(--tw-gradient-stops))\",\n        \"gradient-conic\":\n          \"conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))\",\n      },\n    },\n  },\n  plugins: [],\n};\n"
  },
  {
    "path": "Video 123/comps/.eslintrc.json",
    "content": "{\n  \"extends\": \"next/core-web-vitals\"\n}\n"
  },
  {
    "path": "Video 123/comps/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n.yarn/install-state.gz\n\n# testing\n/coverage\n\n# next.js\n/.next/\n/out/\n\n# production\n/build\n\n# misc\n.DS_Store\n*.pem\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# local env files\n.env*.local\n\n# vercel\n.vercel\n\n# typescript\n*.tsbuildinfo\nnext-env.d.ts\n"
  },
  {
    "path": "Video 123/comps/README.md",
    "content": "This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).\n\n## Getting Started\n\nFirst, run the development server:\n\n```bash\nnpm run dev\n# or\nyarn dev\n# or\npnpm dev\n# or\nbun dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) with your browser to see the result.\n\nYou can start editing the page by modifying `app/page.js`. The page auto-updates as you edit the file.\n\nThis project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.\n\n## Learn More\n\nTo learn more about Next.js, take a look at the following resources:\n\n- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.\n- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.\n\nYou can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!\n\n## Deploy on Vercel\n\nThe easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.\n\nCheck out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.\n"
  },
  {
    "path": "Video 123/comps/app/about/page.js",
    "content": "import React from 'react'\nimport Script from 'next/script'\n\nconst page = () => {\n    return (\n        <div>\n            <Script>\n                {`alert(\"hello\")`}\n            </Script>\n            I am about\n        </div>\n    )\n}\n\nexport default page\n\nexport const metadata = {\n    title: 'About - facebook.com',\n    description: 'facebook is a social media platform',\n}\n"
  },
  {
    "path": "Video 123/comps/app/contact/page.js",
    "content": "import React from 'react'\n\nconst Contact = () => {\n  return (\n    <div>\n      I am contact\n    </div>\n  )\n}\n\nexport default Contact\n"
  },
  {
    "path": "Video 123/comps/app/footer/page.js",
    "content": "import React from 'react'\n\nconst Footer = () => {\n  return (\n    <footer className='flex justify-around bg-slate-800 text-white py-4'>\n    <div className=\"text-center\">Copyright ©️ Facebook | All rights reserved</div>\n    <ul className='flex gap-2 text-sm'>\n        <a href='/'><li className='text-xs'>Home</li></a>\n        <a href='/about'><li className='text-xs'>About</li></a>\n        <a href='/contact'><li className='text-xs'>Contact</li></a>\n    </ul>\n</footer>\n  )\n}\n\nexport default Footer\n"
  },
  {
    "path": "Video 123/comps/app/globals.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n:root {\n  --foreground-rgb: 0, 0, 0;\n  --background-start-rgb: 214, 219, 220;\n  --background-end-rgb: 255, 255, 255;\n}\n\n@media (prefers-color-scheme: dark) {\n  :root {\n    --foreground-rgb: 255, 255, 255;\n    --background-start-rgb: 0, 0, 0;\n    --background-end-rgb: 0, 0, 0;\n  }\n}\n\nbody {\n  color: rgb(var(--foreground-rgb));\n  background: linear-gradient(\n      to bottom,\n      transparent,\n      rgb(var(--background-end-rgb))\n    )\n    rgb(var(--background-start-rgb));\n}\n\n@layer utilities {\n  .text-balance {\n    text-wrap: balance;\n  }\n}\n"
  },
  {
    "path": "Video 123/comps/app/layout.js",
    "content": "import { Inter } from \"next/font/google\";\nimport \"./globals.css\";\nimport Navbar from \"@/components/Navbar\";\nimport Footer from \"./footer/page\";\n\nconst inter = Inter({ subsets: [\"latin\"] });\n\nexport const metadata = {\n  title: \"Facebook - Connect with the world\",\n  description: \"Facebook helps you connect with the world\",\n};\n\nexport default function RootLayout({ children }) {\n  return (\n    <html lang=\"en\">\n\n      <body className={inter.className}>\n        <Navbar />\n        <div className=\"container max-w-[60rem] mx-auto my-5 min-h-screen\">\n\n        {children}\n        </div>\n        <Footer/>\n      </body>\n    </html>\n  );\n}\n"
  },
  {
    "path": "Video 123/comps/app/page.js",
    "content": "'use client'\n \n\nexport default function Home() {\n  \n\n  return (\n    <>\n    <div className=\"hidden  translate-x-[0%] translate-x-[100%] translate-x-[200%]\"></div>\n\n      <div className=\"slider bg-red-500 overflow-hidden flex \">\n        <img className=\"\" src=\"http://www.menucool.com/slider/prod/image-slider-1.jpg\" alt=\"\" />\n        <img className=\"\" src=\"http://www.menucool.com/slider/prod/image-slider-2.jpg\" alt=\"\" />\n        <img className=\"\" src=\"http://www.menucool.com/slider/prod/image-slider-3.jpg\" alt=\"\" />\n\n      </div>\n    </>\n  );\n}\n"
  },
  {
    "path": "Video 123/comps/components/Navbar.js",
    "content": "import React from 'react'\n\nconst Navbar = () => {\n  return (\n    <nav className='flex justify-around bg-slate-800 text-white py-4'>\n        <div className=\"logo font-bold\">Facebook</div>\n        <ul className='flex gap-6'>\n            <a href='/'><li>Home</li></a>\n            <a href='/about'><li>About</li></a>\n            <a href='/contact'><li>Contact</li></a>\n        </ul>\n    </nav>\n  )\n}\n\nexport default Navbar\n"
  },
  {
    "path": "Video 123/comps/jsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"paths\": {\n      \"@/*\": [\"./*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "Video 123/comps/next.config.mjs",
    "content": "/** @type {import('next').NextConfig} */\nconst nextConfig = {};\n\nexport default nextConfig;\n"
  },
  {
    "path": "Video 123/comps/package.json",
    "content": "{\n  \"name\": \"comps\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"build\": \"next build\",\n    \"start\": \"next start\",\n    \"lint\": \"next lint\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18\",\n    \"react-dom\": \"^18\",\n    \"next\": \"14.1.0\"\n  },\n  \"devDependencies\": {\n    \"autoprefixer\": \"^10.0.1\",\n    \"postcss\": \"^8\",\n    \"tailwindcss\": \"^3.3.0\",\n    \"eslint\": \"^8\",\n    \"eslint-config-next\": \"14.1.0\"\n  }\n}\n"
  },
  {
    "path": "Video 123/comps/postcss.config.js",
    "content": "module.exports = {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {},\n  },\n};\n"
  },
  {
    "path": "Video 123/comps/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\n    \"./pages/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./components/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./app/**/*.{js,ts,jsx,tsx,mdx}\",\n  ],\n  theme: {\n    extend: {\n      backgroundImage: {\n        \"gradient-radial\": \"radial-gradient(var(--tw-gradient-stops))\",\n        \"gradient-conic\":\n          \"conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))\",\n      },\n    },\n  },\n  plugins: [],\n};\n"
  },
  {
    "path": "Video 123/website/.eslintrc.json",
    "content": "{\n  \"extends\": \"next/core-web-vitals\"\n}\n"
  },
  {
    "path": "Video 123/website/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n.yarn/install-state.gz\n\n# testing\n/coverage\n\n# next.js\n/.next/\n/out/\n\n# production\n/build\n\n# misc\n.DS_Store\n*.pem\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# local env files\n.env*.local\n\n# vercel\n.vercel\n\n# typescript\n*.tsbuildinfo\nnext-env.d.ts\n"
  },
  {
    "path": "Video 123/website/README.md",
    "content": "This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).\n\n## Getting Started\n\nFirst, run the development server:\n\n```bash\nnpm run dev\n# or\nyarn dev\n# or\npnpm dev\n# or\nbun dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) with your browser to see the result.\n\nYou can start editing the page by modifying `app/page.js`. The page auto-updates as you edit the file.\n\nThis project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.\n\n## Learn More\n\nTo learn more about Next.js, take a look at the following resources:\n\n- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.\n- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.\n\nYou can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!\n\n## Deploy on Vercel\n\nThe easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.\n\nCheck out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.\n"
  },
  {
    "path": "Video 123/website/app/about/page.js",
    "content": "import React from 'react'\n\nconst about = () => {\n  return (\n    <div>\n      About\n    </div>\n  )\n}\n\nexport default about\n\nexport const metadata = {\n    title: \"About Facebook - Connect with the world\",\n    description: \"This is about facebook and we can connect with the world using facebook\",\n  };"
  },
  {
    "path": "Video 123/website/app/contact/page.js",
    "content": "import React from 'react'\nimport Script from 'next/script'\n\nconst contact = () => {\n  return (\n    <div>\n        <Script>\n            {`alert(\"Wecome to contact page\");`}\n        </Script>\n      this is contact\n    </div>\n  )\n}\n\nexport default contact\n\nexport const metadata = {\n    title: \"Contact Facebook - Connect with the world\",\n    description: \"This is a page where you can contact facebook and we can connect with the world using facebook\",\n  };"
  },
  {
    "path": "Video 123/website/app/globals.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n:root {\n  --foreground-rgb: 0, 0, 0;\n  --background-start-rgb: 214, 219, 220;\n  --background-end-rgb: 255, 255, 255;\n}\n\n@media (prefers-color-scheme: dark) {\n  :root {\n    --foreground-rgb: 255, 255, 255;\n    --background-start-rgb: 0, 0, 0;\n    --background-end-rgb: 0, 0, 0;\n  }\n}\n\nbody {\n  color: rgb(var(--foreground-rgb));\n  background: linear-gradient(\n      to bottom,\n      transparent,\n      rgb(var(--background-end-rgb))\n    )\n    rgb(var(--background-start-rgb));\n}\n\n@layer utilities {\n  .text-balance {\n    text-wrap: balance;\n  }\n}\n"
  },
  {
    "path": "Video 123/website/app/layout.js",
    "content": "import { Inter } from \"next/font/google\";\nimport \"./globals.css\";\nimport Navbar from \"@/components/Navbar\";\nimport Footer from \"@/components/Footer\";\n\nconst inter = Inter({ subsets: [\"latin\"] });\n\nexport const metadata = {\n  title: \"Facebook - Connect with the world\",\n  description: \"This is facebook and we can connect with the world using facebook\",\n};\n\nexport default function RootLayout({ children }) {\n  return (\n    <html lang=\"en\">\n      <body className={inter.className}>\n        <Navbar />\n        <div className=\"container mx-auto min-h-[85vh]\">\n          {children}\n        </div>\n        <Footer />\n      </body>\n    </html>\n  );\n}\n"
  },
  {
    "path": "Video 123/website/app/page.js",
    "content": "import Image from \"next/image\";\n\nexport default function Home() {\n  return (\n     <div className=\"container my-5 size-80 bg-red-300 relative\">\n      <Image className=\"mx-auto object-cover\" fill={true} src=\"http://www.menucool.com/slider/prod/image-slider-3.jpg\" alt=\"\" />\n     </div>\n  );\n}\n"
  },
  {
    "path": "Video 123/website/components/Footer.js",
    "content": "import React from 'react'\n\nconst Footer = () => {\n  return (\n    <footer className='flex justify-around bg-slate-800 text-white py-4 text-xs'>\n    <div className=\"text-center\">Copyright ©️ Facebook | All rights reserved</div>\n    <ul className='flex gap-2 text-sm'>\n        <a href='/'><li className='text-xs'>Home</li></a>\n        <a href='/about'><li className='text-xs'>About</li></a>\n        <a href='/contact'><li className='text-xs'>Contact</li></a>\n    </ul>\n</footer>\n  )\n}\n\nexport default Footer"
  },
  {
    "path": "Video 123/website/components/Navbar.js",
    "content": "import React from 'react'\nimport Link from 'next/link' \n\nconst Navbar = () => {\n  return (\n    <nav className='flex justify-between px-4 bg-slate-800 text-white py-4'>\n        <div className=\"logo font-bold\">Facebook</div>\n        <ul className='flex gap-6'>\n            <Link href='/'><li>Home</li></Link>\n            <Link href='/about'><li>About</li></Link>\n            <Link href='/contact'><li>Contact</li></Link>\n        </ul>\n    </nav>\n  )\n}\n\nexport default Navbar"
  },
  {
    "path": "Video 123/website/jsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"paths\": {\n      \"@/*\": [\"./*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "Video 123/website/next.config.mjs",
    "content": "/** @type {import('next').NextConfig} */\nconst nextConfig = {\n    images: {\n        remotePatterns: [\n          {\n            protocol: 'http',\n            hostname: 'www.menucool.com',\n            port: '', \n          },\n        ],\n      },\n};\n\nexport default nextConfig;\n"
  },
  {
    "path": "Video 123/website/package.json",
    "content": "{\n  \"name\": \"website\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"build\": \"next build\",\n    \"start\": \"next start\",\n    \"lint\": \"next lint\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18\",\n    \"react-dom\": \"^18\",\n    \"next\": \"14.1.0\"\n  },\n  \"devDependencies\": {\n    \"autoprefixer\": \"^10.0.1\",\n    \"postcss\": \"^8\",\n    \"tailwindcss\": \"^3.3.0\",\n    \"eslint\": \"^8\",\n    \"eslint-config-next\": \"14.1.0\"\n  }\n}\n"
  },
  {
    "path": "Video 123/website/postcss.config.js",
    "content": "module.exports = {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {},\n  },\n};\n"
  },
  {
    "path": "Video 123/website/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\n    \"./pages/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./components/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./app/**/*.{js,ts,jsx,tsx,mdx}\",\n  ],\n  theme: {\n    extend: {\n      backgroundImage: {\n        \"gradient-radial\": \"radial-gradient(var(--tw-gradient-stops))\",\n        \"gradient-conic\":\n          \"conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))\",\n      },\n    },\n  },\n  plugins: [],\n};\n"
  },
  {
    "path": "Video 124/api-routes/.eslintrc.json",
    "content": "{\n  \"extends\": \"next/core-web-vitals\"\n}\n"
  },
  {
    "path": "Video 124/api-routes/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n.yarn/install-state.gz\n\n# testing\n/coverage\n\n# next.js\n/.next/\n/out/\n\n# production\n/build\n\n# misc\n.DS_Store\n*.pem\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# local env files\n.env*.local\n\n# vercel\n.vercel\n\n# typescript\n*.tsbuildinfo\nnext-env.d.ts\n"
  },
  {
    "path": "Video 124/api-routes/README.md",
    "content": "This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).\n\n## Getting Started\n\nFirst, run the development server:\n\n```bash\nnpm run dev\n# or\nyarn dev\n# or\npnpm dev\n# or\nbun dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) with your browser to see the result.\n\nYou can start editing the page by modifying `app/page.js`. The page auto-updates as you edit the file.\n\nThis project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.\n\n## Learn More\n\nTo learn more about Next.js, take a look at the following resources:\n\n- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.\n- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.\n\nYou can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!\n\n## Deploy on Vercel\n\nThe easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.\n\nCheck out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.\n"
  },
  {
    "path": "Video 124/api-routes/app/api/add/route.js",
    "content": "import { NextResponse } from \"next/server\";\n\nexport async function POST(request) {\n    let data = await request.json()\n    console.log(data)\n    return NextResponse.json({success: true, data})\n} \n  "
  },
  {
    "path": "Video 124/api-routes/app/globals.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n:root {\n  --foreground-rgb: 0, 0, 0;\n  --background-start-rgb: 214, 219, 220;\n  --background-end-rgb: 255, 255, 255;\n}\n\n@media (prefers-color-scheme: dark) {\n  :root {\n    --foreground-rgb: 255, 255, 255;\n    --background-start-rgb: 0, 0, 0;\n    --background-end-rgb: 0, 0, 0;\n  }\n}\n\nbody {\n  color: rgb(var(--foreground-rgb));\n  background: linear-gradient(\n      to bottom,\n      transparent,\n      rgb(var(--background-end-rgb))\n    )\n    rgb(var(--background-start-rgb));\n}\n\n@layer utilities {\n  .text-balance {\n    text-wrap: balance;\n  }\n}\n"
  },
  {
    "path": "Video 124/api-routes/app/layout.js",
    "content": "import { Inter } from \"next/font/google\";\nimport \"./globals.css\";\n\nconst inter = Inter({ subsets: [\"latin\"] });\n\nexport const metadata = {\n  title: \"Create Next App\",\n  description: \"Generated by create next app\",\n};\n\nexport default function RootLayout({ children }) {\n  return (\n    <html lang=\"en\">\n      <body className={inter.className}>{children}</body>\n    </html>\n  );\n}\n"
  },
  {
    "path": "Video 124/api-routes/app/page.js",
    "content": "\"use client\"\nimport Image from \"next/image\";\n\nexport default function Home() {\n  const handleClick = async () => {\n    let data = {\n      name: \"Shubham\",\n      role: \"Coder\"\n    }\n    let a = await fetch(\"/api/add\", {\n      method: \"POST\", headers: {\n        \"Content-Type\": \"application/json\",\n      },\n      body: JSON.stringify(data),\n    })\n    let res = await a.json()\n    console.log(res)\n  }\n\n  return (\n    <div>\n      <h1 className=\"text-xl font-bold\">Next.js Api routes demo</h1>\n      <button onClick={handleClick}>click me</button>\n    </div>\n  );\n}\n"
  },
  {
    "path": "Video 124/api-routes/jsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"paths\": {\n      \"@/*\": [\"./*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "Video 124/api-routes/next.config.mjs",
    "content": "/** @type {import('next').NextConfig} */\nconst nextConfig = {};\n\nexport default nextConfig;\n"
  },
  {
    "path": "Video 124/api-routes/package.json",
    "content": "{\n  \"name\": \"api-routes\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"build\": \"next build\",\n    \"start\": \"next start\",\n    \"lint\": \"next lint\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18\",\n    \"react-dom\": \"^18\",\n    \"next\": \"14.1.0\"\n  },\n  \"devDependencies\": {\n    \"autoprefixer\": \"^10.0.1\",\n    \"postcss\": \"^8\",\n    \"tailwindcss\": \"^3.3.0\",\n    \"eslint\": \"^8\",\n    \"eslint-config-next\": \"14.1.0\"\n  }\n}\n"
  },
  {
    "path": "Video 124/api-routes/postcss.config.js",
    "content": "module.exports = {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {},\n  },\n};\n"
  },
  {
    "path": "Video 124/api-routes/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\n    \"./pages/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./components/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./app/**/*.{js,ts,jsx,tsx,mdx}\",\n  ],\n  theme: {\n    extend: {\n      backgroundImage: {\n        \"gradient-radial\": \"radial-gradient(var(--tw-gradient-stops))\",\n        \"gradient-conic\":\n          \"conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))\",\n      },\n    },\n  },\n  plugins: [],\n};\n"
  },
  {
    "path": "Video 125/server-actions/.eslintrc.json",
    "content": "{\n  \"extends\": \"next/core-web-vitals\"\n}\n"
  },
  {
    "path": "Video 125/server-actions/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n.yarn/install-state.gz\n\n# testing\n/coverage\n\n# next.js\n/.next/\n/out/\n\n# production\n/build\n\n# misc\n.DS_Store\n*.pem\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# local env files\n.env*.local\n\n# vercel\n.vercel\n\n# typescript\n*.tsbuildinfo\nnext-env.d.ts\n"
  },
  {
    "path": "Video 125/server-actions/README.md",
    "content": "This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).\n\n## Getting Started\n\nFirst, run the development server:\n\n```bash\nnpm run dev\n# or\nyarn dev\n# or\npnpm dev\n# or\nbun dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) with your browser to see the result.\n\nYou can start editing the page by modifying `app/page.js`. The page auto-updates as you edit the file.\n\nThis project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.\n\n## Learn More\n\nTo learn more about Next.js, take a look at the following resources:\n\n- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.\n- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.\n\nYou can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!\n\n## Deploy on Vercel\n\nThe easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.\n\nCheck out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.\n"
  },
  {
    "path": "Video 125/server-actions/actions/form.js",
    "content": "\"use server\"\nimport fs from \"fs/promises\"\nexport const submitAction = async (e) => {\n    console.log(e.get(\"name\"), e.get(\"add\"))\n    let a = await fs.writeFile(\"harry.txt\", `Name is ${e.get(\"name\")} and Address is ${e.get(\"add\")}`) \n\n  }"
  },
  {
    "path": "Video 125/server-actions/app/globals.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n:root {\n  --foreground-rgb: 0, 0, 0;\n  --background-start-rgb: 214, 219, 220;\n  --background-end-rgb: 255, 255, 255;\n}\n\n@media (prefers-color-scheme: dark) {\n  :root {\n    --foreground-rgb: 255, 255, 255;\n    --background-start-rgb: 0, 0, 0;\n    --background-end-rgb: 0, 0, 0;\n  }\n}\n\nbody {\n  color: rgb(var(--foreground-rgb));\n  background: linear-gradient(\n      to bottom,\n      transparent,\n      rgb(var(--background-end-rgb))\n    )\n    rgb(var(--background-start-rgb));\n}\n\n@layer utilities {\n  .text-balance {\n    text-wrap: balance;\n  }\n}\n"
  },
  {
    "path": "Video 125/server-actions/app/layout.js",
    "content": "import { Inter } from \"next/font/google\";\nimport \"./globals.css\";\n\nconst inter = Inter({ subsets: [\"latin\"] });\n\nexport const metadata = {\n  title: \"Create Next App\",\n  description: \"Generated by create next app\",\n};\n\nexport default function RootLayout({ children }) {\n  return (\n    <html lang=\"en\">\n      <body className={inter.className}>{children}</body>\n    </html>\n  );\n}\n"
  },
  {
    "path": "Video 125/server-actions/app/page.js",
    "content": "\"use client\"\nimport { submitAction } from \"@/actions/form\";\nimport { useRef } from \"react\";\n\nexport default function Home() {\n  let ref = useRef()\n  return (\n    <div className=\"w-2/3 mx-auto my-12\">\n      <form ref={ref} action={(e)=> {submitAction(e); ref.current.reset()}}>\n        <div>\n          <label htmlFor=\"name\">Name</label>\n          <input name=\"name\" id=\"name\" className=\"text-black mx-4\" type=\"text\" />\n        </div>\n        <div>\n          <label htmlFor=\"add\">Address</label>\n          <input name=\"add\" id=\"add\" className=\"text-black mx-4\" type=\"text\" />\n        </div>\n        <div>\n\n        <button className=\"border border-white px-3\">Submit</button>\n        </div>\n      </form>\n    </div>\n  );\n}\n"
  },
  {
    "path": "Video 125/server-actions/harry.txt",
    "content": "Name is Harry and Address is India"
  },
  {
    "path": "Video 125/server-actions/jsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"paths\": {\n      \"@/*\": [\"./*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "Video 125/server-actions/next.config.mjs",
    "content": "/** @type {import('next').NextConfig} */\nconst nextConfig = {};\n\nexport default nextConfig;\n"
  },
  {
    "path": "Video 125/server-actions/package.json",
    "content": "{\n  \"name\": \"server-actions\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"build\": \"next build\",\n    \"start\": \"next start\",\n    \"lint\": \"next lint\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18\",\n    \"react-dom\": \"^18\",\n    \"next\": \"14.1.0\"\n  },\n  \"devDependencies\": {\n    \"autoprefixer\": \"^10.0.1\",\n    \"postcss\": \"^8\",\n    \"tailwindcss\": \"^3.3.0\",\n    \"eslint\": \"^8\",\n    \"eslint-config-next\": \"14.1.0\"\n  }\n}\n"
  },
  {
    "path": "Video 125/server-actions/postcss.config.js",
    "content": "module.exports = {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {},\n  },\n};\n"
  },
  {
    "path": "Video 125/server-actions/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\n    \"./pages/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./components/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./app/**/*.{js,ts,jsx,tsx,mdx}\",\n  ],\n  theme: {\n    extend: {\n      backgroundImage: {\n        \"gradient-radial\": \"radial-gradient(var(--tw-gradient-stops))\",\n        \"gradient-conic\":\n          \"conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))\",\n      },\n    },\n  },\n  plugins: [],\n};\n"
  },
  {
    "path": "Video 126/middleware/.eslintrc.json",
    "content": "{\n  \"extends\": \"next/core-web-vitals\"\n}\n"
  },
  {
    "path": "Video 126/middleware/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n.yarn/install-state.gz\n\n# testing\n/coverage\n\n# next.js\n/.next/\n/out/\n\n# production\n/build\n\n# misc\n.DS_Store\n*.pem\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# local env files\n.env*.local\n\n# vercel\n.vercel\n\n# typescript\n*.tsbuildinfo\nnext-env.d.ts\n"
  },
  {
    "path": "Video 126/middleware/README.md",
    "content": "This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).\n\n## Getting Started\n\nFirst, run the development server:\n\n```bash\nnpm run dev\n# or\nyarn dev\n# or\npnpm dev\n# or\nbun dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) with your browser to see the result.\n\nYou can start editing the page by modifying `app/page.js`. The page auto-updates as you edit the file.\n\nThis project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.\n\n## Learn More\n\nTo learn more about Next.js, take a look at the following resources:\n\n- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.\n- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.\n\nYou can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!\n\n## Deploy on Vercel\n\nThe easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.\n\nCheck out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.\n"
  },
  {
    "path": "Video 126/middleware/app/about/page.js",
    "content": "import React from 'react'\n\nconst page = () => {\n  return (\n    <div>\n      About page\n    </div>\n  )\n}\n\nexport default page\n"
  },
  {
    "path": "Video 126/middleware/app/globals.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n:root {\n  --foreground-rgb: 0, 0, 0;\n  --background-start-rgb: 214, 219, 220;\n  --background-end-rgb: 255, 255, 255;\n}\n\n@media (prefers-color-scheme: dark) {\n  :root {\n    --foreground-rgb: 255, 255, 255;\n    --background-start-rgb: 0, 0, 0;\n    --background-end-rgb: 0, 0, 0;\n  }\n}\n\nbody {\n  color: rgb(var(--foreground-rgb));\n  background: linear-gradient(\n      to bottom,\n      transparent,\n      rgb(var(--background-end-rgb))\n    )\n    rgb(var(--background-start-rgb));\n}\n\n@layer utilities {\n  .text-balance {\n    text-wrap: balance;\n  }\n}\n"
  },
  {
    "path": "Video 126/middleware/app/layout.js",
    "content": "import { Inter } from \"next/font/google\";\nimport \"./globals.css\";\n\nconst inter = Inter({ subsets: [\"latin\"] });\n\nexport const metadata = {\n  title: \"Create Next App\",\n  description: \"Generated by create next app\",\n};\n\nexport default function RootLayout({ children }) {\n  return (\n    <html lang=\"en\">\n      <body className={inter.className}>{children}</body>\n    </html>\n  );\n}\n"
  },
  {
    "path": "Video 126/middleware/app/page.js",
    "content": "import Image from \"next/image\";\n\nexport default function Home() {\n  return (\n    <main className=\"flex min-h-screen flex-col items-center justify-between p-24\">\n      <div className=\"z-10 max-w-5xl w-full items-center justify-between font-mono text-sm lg:flex\">\n        <p className=\"fixed left-0 top-0 flex w-full justify-center border-b border-gray-300 bg-gradient-to-b from-zinc-200 pb-6 pt-8 backdrop-blur-2xl dark:border-neutral-800 dark:bg-zinc-800/30 dark:from-inherit lg:static lg:w-auto  lg:rounded-xl lg:border lg:bg-gray-200 lg:p-4 lg:dark:bg-zinc-800/30\">\n          Get started by editing&nbsp;\n          <code className=\"font-mono font-bold\">app/page.js</code>\n        </p>\n        <div className=\"fixed bottom-0 left-0 flex h-48 w-full items-end justify-center bg-gradient-to-t from-white via-white dark:from-black dark:via-black lg:static lg:h-auto lg:w-auto lg:bg-none\">\n          <a\n            className=\"pointer-events-none flex place-items-center gap-2 p-8 lg:pointer-events-auto lg:p-0\"\n            href=\"https://vercel.com?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            By{\" \"}\n            <Image\n              src=\"/vercel.svg\"\n              alt=\"Vercel Logo\"\n              className=\"dark:invert\"\n              width={100}\n              height={24}\n              priority\n            />\n          </a>\n        </div>\n      </div>\n\n      <div className=\"relative flex place-items-center before:absolute before:h-[300px] before:w-full sm:before:w-[480px] before:-translate-x-1/2 before:rounded-full before:bg-gradient-radial before:from-white before:to-transparent before:blur-2xl before:content-[''] after:absolute after:-z-20 after:h-[180px] after:w-full sm:after:w-[240px] after:translate-x-1/3 after:bg-gradient-conic after:from-sky-200 after:via-blue-200 after:blur-2xl after:content-[''] before:dark:bg-gradient-to-br before:dark:from-transparent before:dark:to-blue-700 before:dark:opacity-10 after:dark:from-sky-900 after:dark:via-[#0141ff] after:dark:opacity-40 before:lg:h-[360px] z-[-1]\">\n        <Image\n          className=\"relative dark:drop-shadow-[0_0_0.3rem_#ffffff70] dark:invert\"\n          src=\"/next.svg\"\n          alt=\"Next.js Logo\"\n          width={180}\n          height={37}\n          priority\n        />\n      </div>\n\n      <div className=\"mb-32 grid text-center lg:max-w-5xl lg:w-full lg:mb-0 lg:grid-cols-4 lg:text-left\">\n        <a\n          href=\"https://nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app\"\n          className=\"group rounded-lg border border-transparent px-5 py-4 transition-colors hover:border-gray-300 hover:bg-gray-100 hover:dark:border-neutral-700 hover:dark:bg-neutral-800/30\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          <h2 className={`mb-3 text-2xl font-semibold`}>\n            Docs{\" \"}\n            <span className=\"inline-block transition-transform group-hover:translate-x-1 motion-reduce:transform-none\">\n              -&gt;\n            </span>\n          </h2>\n          <p className={`m-0 max-w-[30ch] text-sm opacity-50`}>\n            Find in-depth information about Next.js features and API.\n          </p>\n        </a>\n\n        <a\n          href=\"https://nextjs.org/learn?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app\"\n          className=\"group rounded-lg border border-transparent px-5 py-4 transition-colors hover:border-gray-300 hover:bg-gray-100 hover:dark:border-neutral-700 hover:dark:bg-neutral-800 hover:dark:bg-opacity-30\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          <h2 className={`mb-3 text-2xl font-semibold`}>\n            Learn{\" \"}\n            <span className=\"inline-block transition-transform group-hover:translate-x-1 motion-reduce:transform-none\">\n              -&gt;\n            </span>\n          </h2>\n          <p className={`m-0 max-w-[30ch] text-sm opacity-50`}>\n            Learn about Next.js in an interactive course with&nbsp;quizzes!\n          </p>\n        </a>\n\n        <a\n          href=\"https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app\"\n          className=\"group rounded-lg border border-transparent px-5 py-4 transition-colors hover:border-gray-300 hover:bg-gray-100 hover:dark:border-neutral-700 hover:dark:bg-neutral-800/30\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          <h2 className={`mb-3 text-2xl font-semibold`}>\n            Templates{\" \"}\n            <span className=\"inline-block transition-transform group-hover:translate-x-1 motion-reduce:transform-none\">\n              -&gt;\n            </span>\n          </h2>\n          <p className={`m-0 max-w-[30ch] text-sm opacity-50`}>\n            Explore starter templates for Next.js.\n          </p>\n        </a>\n\n        <a\n          href=\"https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app\"\n          className=\"group rounded-lg border border-transparent px-5 py-4 transition-colors hover:border-gray-300 hover:bg-gray-100 hover:dark:border-neutral-700 hover:dark:bg-neutral-800/30\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          <h2 className={`mb-3 text-2xl font-semibold`}>\n            Deploy{\" \"}\n            <span className=\"inline-block transition-transform group-hover:translate-x-1 motion-reduce:transform-none\">\n              -&gt;\n            </span>\n          </h2>\n          <p className={`m-0 max-w-[30ch] text-sm opacity-50 text-balance`}>\n            Instantly deploy your Next.js site to a shareable URL with Vercel.\n          </p>\n        </a>\n      </div>\n    </main>\n  );\n}\n"
  },
  {
    "path": "Video 126/middleware/jsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"paths\": {\n      \"@/*\": [\"./*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "Video 126/middleware/middleware.js",
    "content": "// import { NextResponse } from 'next/server'\n \n// // This function can be marked `async` if using `await` inside\n// export function middleware(request) {\n//     // return NextResponse.json({ message: 'Hello from the about page' })\n//   return NextResponse.redirect(new URL('/', request.url))\n// }\n \n// // See \"Matching Paths\" below to learn more\n// export const config = {\n//   matcher: '/about/:path*',\n// }\n\n\nimport { NextResponse } from 'next/server'\n \nexport function middleware(request) {\n  if (request.nextUrl.pathname.startsWith('/about')) {\n    return NextResponse.rewrite(new URL('/', request.url))\n  }\n \n  if (request.nextUrl.pathname.startsWith('/dashboard')) {\n    return NextResponse.redirect(new URL('/', request.url))\n  }\n}"
  },
  {
    "path": "Video 126/middleware/next.config.mjs",
    "content": "/** @type {import('next').NextConfig} */\nconst nextConfig = {};\n\nexport default nextConfig;\n"
  },
  {
    "path": "Video 126/middleware/package.json",
    "content": "{\n  \"name\": \"middleware\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"build\": \"next build\",\n    \"start\": \"next start\",\n    \"lint\": \"next lint\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18\",\n    \"react-dom\": \"^18\",\n    \"next\": \"14.1.1\"\n  },\n  \"devDependencies\": {\n    \"autoprefixer\": \"^10.0.1\",\n    \"postcss\": \"^8\",\n    \"tailwindcss\": \"^3.3.0\",\n    \"eslint\": \"^8\",\n    \"eslint-config-next\": \"14.1.1\"\n  }\n}\n"
  },
  {
    "path": "Video 126/middleware/postcss.config.js",
    "content": "module.exports = {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {},\n  },\n};\n"
  },
  {
    "path": "Video 126/middleware/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\n    \"./pages/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./components/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./app/**/*.{js,ts,jsx,tsx,mdx}\",\n  ],\n  theme: {\n    extend: {\n      backgroundImage: {\n        \"gradient-radial\": \"radial-gradient(var(--tw-gradient-stops))\",\n        \"gradient-conic\":\n          \"conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))\",\n      },\n    },\n  },\n  plugins: [],\n};\n"
  },
  {
    "path": "Video 127/nextauth-demo/.eslintrc.json",
    "content": "{\n  \"extends\": \"next/core-web-vitals\"\n}\n"
  },
  {
    "path": "Video 127/nextauth-demo/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n.yarn/install-state.gz\n\n# testing\n/coverage\n\n# next.js\n/.next/\n/out/\n\n# production\n/build\n\n# misc\n.DS_Store\n*.pem\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# local env files\n.env*.local\n\n# vercel\n.vercel\n\n# typescript\n*.tsbuildinfo\nnext-env.d.ts\n"
  },
  {
    "path": "Video 127/nextauth-demo/README.md",
    "content": "This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).\n\n## Getting Started\n\nFirst, run the development server:\n\n```bash\nnpm run dev\n# or\nyarn dev\n# or\npnpm dev\n# or\nbun dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) with your browser to see the result.\n\nYou can start editing the page by modifying `app/page.js`. The page auto-updates as you edit the file.\n\nThis project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.\n\n## Learn More\n\nTo learn more about Next.js, take a look at the following resources:\n\n- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.\n- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.\n\nYou can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!\n\n## Deploy on Vercel\n\nThe easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.\n\nCheck out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.\n"
  },
  {
    "path": "Video 127/nextauth-demo/app/api/auth/[...nextauth]/route.js",
    "content": "import NextAuth from 'next-auth'\nimport GithubProvider from \"next-auth/providers/github\"\n\nconst handler = NextAuth({\n  providers: [\n    // OAuth authentication providers...\n    GithubProvider({\n        clientId: process.env.GITHUB_ID,\n        clientSecret: process.env.GITHUB_SECRET,\n      }),\n  ]\n})\n\nexport {handler as GET, handler as POST}"
  },
  {
    "path": "Video 127/nextauth-demo/app/component/SessionWrapper.js",
    "content": "\"use client\"\nimport { SessionProvider } from \"next-auth/react\"\n\n\nconst SessionWrapper = ({children}) => {\n  return (\n    <SessionProvider>{children}</SessionProvider>\n  )\n}\n\nexport default SessionWrapper\n"
  },
  {
    "path": "Video 127/nextauth-demo/app/globals.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n:root {\n  --foreground-rgb: 0, 0, 0;\n  --background-start-rgb: 214, 219, 220;\n  --background-end-rgb: 255, 255, 255;\n}\n\n@media (prefers-color-scheme: dark) {\n  :root {\n    --foreground-rgb: 255, 255, 255;\n    --background-start-rgb: 0, 0, 0;\n    --background-end-rgb: 0, 0, 0;\n  }\n}\n\nbody {\n  color: rgb(var(--foreground-rgb));\n  background: linear-gradient(\n      to bottom,\n      transparent,\n      rgb(var(--background-end-rgb))\n    )\n    rgb(var(--background-start-rgb));\n}\n\n@layer utilities {\n  .text-balance {\n    text-wrap: balance;\n  }\n}\n"
  },
  {
    "path": "Video 127/nextauth-demo/app/layout.js",
    "content": "import { Inter } from \"next/font/google\";\nimport \"./globals.css\";\nimport SessionWrapper from \"./component/SessionWrapper\";\n\nconst inter = Inter({ subsets: [\"latin\"] });\n\nexport const metadata = {\n  title: \"Create Next App\",\n  description: \"Generated by create next app\",\n};\n\nexport default function RootLayout({ children }) {\n  return (\n    <html lang=\"en\">\n      <SessionWrapper>\n      <body className={inter.className}>{children}</body>\n      </SessionWrapper>\n    </html>\n  );\n}\n"
  },
  {
    "path": "Video 127/nextauth-demo/app/page.js",
    "content": "\"use client\"\nimport { useSession, signIn, signOut } from \"next-auth/react\"\n\nexport default function Component() {\n  const { data: session } = useSession()\n  console.log(session)\n  if(session) {\n    return <>\n      Signed in as {session.user.email} <br/>\n      <button onClick={() => signOut()}>Sign out</button>\n    </>\n  }\n  return <>\n    Not signed in <br/>\n    <button onClick={() => signIn(\"github\")}>Sign in using Github</button>\n    <button onClick={() => signIn(\"google\")}>Sign in using Google</button> \n  </>\n}"
  },
  {
    "path": "Video 127/nextauth-demo/jsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"paths\": {\n      \"@/*\": [\"./*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "Video 127/nextauth-demo/next.config.mjs",
    "content": "/** @type {import('next').NextConfig} */\nconst nextConfig = {};\n\nexport default nextConfig;\n"
  },
  {
    "path": "Video 127/nextauth-demo/package.json",
    "content": "{\n  \"name\": \"nextauth-demo\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"build\": \"next build\",\n    \"start\": \"next start\",\n    \"lint\": \"next lint\"\n  },\n  \"dependencies\": {\n    \"next\": \"14.1.0\",\n    \"next-auth\": \"^4.24.6\",\n    \"react\": \"^18\",\n    \"react-dom\": \"^18\"\n  },\n  \"devDependencies\": {\n    \"autoprefixer\": \"^10.0.1\",\n    \"eslint\": \"^8\",\n    \"eslint-config-next\": \"14.1.0\",\n    \"postcss\": \"^8\",\n    \"tailwindcss\": \"^3.3.0\"\n  }\n}\n"
  },
  {
    "path": "Video 127/nextauth-demo/postcss.config.js",
    "content": "module.exports = {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {},\n  },\n};\n"
  },
  {
    "path": "Video 127/nextauth-demo/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\n    \"./pages/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./components/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./app/**/*.{js,ts,jsx,tsx,mdx}\",\n  ],\n  theme: {\n    extend: {\n      backgroundImage: {\n        \"gradient-radial\": \"radial-gradient(var(--tw-gradient-stops))\",\n        \"gradient-conic\":\n          \"conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))\",\n      },\n    },\n  },\n  plugins: [],\n};\n"
  },
  {
    "path": "Video 128/dynamic-routes/.eslintrc.json",
    "content": "{\n  \"extends\": \"next/core-web-vitals\"\n}\n"
  },
  {
    "path": "Video 128/dynamic-routes/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n.yarn/install-state.gz\n\n# testing\n/coverage\n\n# next.js\n/.next/\n/out/\n\n# production\n/build\n\n# misc\n.DS_Store\n*.pem\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# local env files\n.env*.local\n\n# vercel\n.vercel\n\n# typescript\n*.tsbuildinfo\nnext-env.d.ts\n"
  },
  {
    "path": "Video 128/dynamic-routes/README.md",
    "content": "This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).\n\n## Getting Started\n\nFirst, run the development server:\n\n```bash\nnpm run dev\n# or\nyarn dev\n# or\npnpm dev\n# or\nbun dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) with your browser to see the result.\n\nYou can start editing the page by modifying `app/page.js`. The page auto-updates as you edit the file.\n\nThis project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.\n\n## Learn More\n\nTo learn more about Next.js, take a look at the following resources:\n\n- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.\n- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.\n\nYou can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!\n\n## Deploy on Vercel\n\nThe easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.\n\nCheck out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.\n"
  },
  {
    "path": "Video 128/dynamic-routes/app/about/[...val]/page.js",
    "content": "export default function Page({ params }) {\n    console.log(params)\n    // fetch your blog post by its slug\n    return <div>I am about page check console</div>\n  }"
  },
  {
    "path": "Video 128/dynamic-routes/app/blog/page.js",
    "content": "import React from 'react'\n\nconst page = () => {\n  return (\n    <div>\n      All Blogs\n    </div>\n  )\n}\n\nexport default page\n"
  },
  {
    "path": "Video 128/dynamic-routes/app/blogpost/[slug]/page.js",
    "content": "export default function Page({ params }) {\n    // throw new Error(\"error hai\")\n    // fetch your blog post by its slug\n    let languages = [\"python\", \"javascript\", \"java\", \"cpp\", \"cs\"]\n    if(languages.includes(params.slug)){\n        return <div>My Post: {params.slug}</div>\n    }\n    else{\n        return <div>Post not found</div>\n    }\n    return <div>My Post: {params.slug}</div>\n  }"
  },
  {
    "path": "Video 128/dynamic-routes/app/error.js",
    "content": "'use client' // Error components must be Client Components\n \nimport { useEffect } from 'react'\n \nexport default function Error({ error, reset }) {\n  useEffect(() => {\n    // Log the error to an error reporting service\n    console.error(error)\n  }, [error])\n \n  return (\n    <div>\n      <h2>Something went wrong!</h2>\n      <button\n        onClick={\n          // Attempt to recover by trying to re-render the segment\n          () => reset()\n        }\n      >\n        Try again\n      </button>\n    </div>\n  )\n}"
  },
  {
    "path": "Video 128/dynamic-routes/app/globals.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n:root {\n  --foreground-rgb: 0, 0, 0;\n  --background-start-rgb: 214, 219, 220;\n  --background-end-rgb: 255, 255, 255;\n}\n\n@media (prefers-color-scheme: dark) {\n  :root {\n    --foreground-rgb: 255, 255, 255;\n    --background-start-rgb: 0, 0, 0;\n    --background-end-rgb: 0, 0, 0;\n  }\n}\n\nbody {\n  color: rgb(var(--foreground-rgb));\n  background: linear-gradient(\n      to bottom,\n      transparent,\n      rgb(var(--background-end-rgb))\n    )\n    rgb(var(--background-start-rgb));\n}\n\n@layer utilities {\n  .text-balance {\n    text-wrap: balance;\n  }\n}\n"
  },
  {
    "path": "Video 128/dynamic-routes/app/layout.js",
    "content": "import { Inter } from \"next/font/google\";\nimport \"./globals.css\";\n\nconst inter = Inter({ subsets: [\"latin\"] });\n\nexport const metadata = {\n  title: \"Create Next App\",\n  description: \"Generated by create next app\",\n};\n\nexport default function RootLayout({ children }) {\n  return (\n    <html lang=\"en\">\n      <body className={inter.className}>{children}</body>\n    </html>\n  );\n}\n"
  },
  {
    "path": "Video 128/dynamic-routes/app/not-found.js",
    "content": "import Link from 'next/link'\n \nexport default function NotFound() {\n  return (\n    <div className=\"text-center\">\n        <h2 className=\"text-4xl font-bold mb-4\">Not Found</h2>\n        <p className=\"text-lg text-gray-600\">Could not find requested resource</p>\n        <Link href=\"/\" className=\"text-blue-500 hover:underline\">Return Home</Link>\n    </div>\n  )\n}"
  },
  {
    "path": "Video 128/dynamic-routes/app/page.js",
    "content": "import Image from \"next/image\";\n\nexport default function Home() {\n  return (\n    <main className=\"flex min-h-screen flex-col items-center justify-between p-24\">\n      <div className=\"z-10 max-w-5xl w-full items-center justify-between font-mono text-sm lg:flex\">\n        <p className=\"fixed left-0 top-0 flex w-full justify-center border-b border-gray-300 bg-gradient-to-b from-zinc-200 pb-6 pt-8 backdrop-blur-2xl dark:border-neutral-800 dark:bg-zinc-800/30 dark:from-inherit lg:static lg:w-auto  lg:rounded-xl lg:border lg:bg-gray-200 lg:p-4 lg:dark:bg-zinc-800/30\">\n          Get started by editing&nbsp;\n          <code className=\"font-mono font-bold\">app/page.js</code>\n        </p>\n        <div className=\"fixed bottom-0 left-0 flex h-48 w-full items-end justify-center bg-gradient-to-t from-white via-white dark:from-black dark:via-black lg:static lg:h-auto lg:w-auto lg:bg-none\">\n          <a\n            className=\"pointer-events-none flex place-items-center gap-2 p-8 lg:pointer-events-auto lg:p-0\"\n            href=\"https://vercel.com?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            By{\" \"}\n            <Image\n              src=\"/vercel.svg\"\n              alt=\"Vercel Logo\"\n              className=\"dark:invert\"\n              width={100}\n              height={24}\n              priority\n            />\n          </a>\n        </div>\n      </div>\n\n      <div className=\"relative flex place-items-center before:absolute before:h-[300px] before:w-full sm:before:w-[480px] before:-translate-x-1/2 before:rounded-full before:bg-gradient-radial before:from-white before:to-transparent before:blur-2xl before:content-[''] after:absolute after:-z-20 after:h-[180px] after:w-full sm:after:w-[240px] after:translate-x-1/3 after:bg-gradient-conic after:from-sky-200 after:via-blue-200 after:blur-2xl after:content-[''] before:dark:bg-gradient-to-br before:dark:from-transparent before:dark:to-blue-700 before:dark:opacity-10 after:dark:from-sky-900 after:dark:via-[#0141ff] after:dark:opacity-40 before:lg:h-[360px] z-[-1]\">\n        <Image\n          className=\"relative dark:drop-shadow-[0_0_0.3rem_#ffffff70] dark:invert\"\n          src=\"/next.svg\"\n          alt=\"Next.js Logo\"\n          width={180}\n          height={37}\n          priority\n        />\n      </div>\n\n      <div className=\"mb-32 grid text-center lg:max-w-5xl lg:w-full lg:mb-0 lg:grid-cols-4 lg:text-left\">\n        <a\n          href=\"https://nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app\"\n          className=\"group rounded-lg border border-transparent px-5 py-4 transition-colors hover:border-gray-300 hover:bg-gray-100 hover:dark:border-neutral-700 hover:dark:bg-neutral-800/30\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          <h2 className={`mb-3 text-2xl font-semibold`}>\n            Docs{\" \"}\n            <span className=\"inline-block transition-transform group-hover:translate-x-1 motion-reduce:transform-none\">\n              -&gt;\n            </span>\n          </h2>\n          <p className={`m-0 max-w-[30ch] text-sm opacity-50`}>\n            Find in-depth information about Next.js features and API.\n          </p>\n        </a>\n\n        <a\n          href=\"https://nextjs.org/learn?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app\"\n          className=\"group rounded-lg border border-transparent px-5 py-4 transition-colors hover:border-gray-300 hover:bg-gray-100 hover:dark:border-neutral-700 hover:dark:bg-neutral-800 hover:dark:bg-opacity-30\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          <h2 className={`mb-3 text-2xl font-semibold`}>\n            Learn{\" \"}\n            <span className=\"inline-block transition-transform group-hover:translate-x-1 motion-reduce:transform-none\">\n              -&gt;\n            </span>\n          </h2>\n          <p className={`m-0 max-w-[30ch] text-sm opacity-50`}>\n            Learn about Next.js in an interactive course with&nbsp;quizzes!\n          </p>\n        </a>\n\n        <a\n          href=\"https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app\"\n          className=\"group rounded-lg border border-transparent px-5 py-4 transition-colors hover:border-gray-300 hover:bg-gray-100 hover:dark:border-neutral-700 hover:dark:bg-neutral-800/30\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          <h2 className={`mb-3 text-2xl font-semibold`}>\n            Templates{\" \"}\n            <span className=\"inline-block transition-transform group-hover:translate-x-1 motion-reduce:transform-none\">\n              -&gt;\n            </span>\n          </h2>\n          <p className={`m-0 max-w-[30ch] text-sm opacity-50`}>\n            Explore starter templates for Next.js.\n          </p>\n        </a>\n\n        <a\n          href=\"https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app\"\n          className=\"group rounded-lg border border-transparent px-5 py-4 transition-colors hover:border-gray-300 hover:bg-gray-100 hover:dark:border-neutral-700 hover:dark:bg-neutral-800/30\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          <h2 className={`mb-3 text-2xl font-semibold`}>\n            Deploy{\" \"}\n            <span className=\"inline-block transition-transform group-hover:translate-x-1 motion-reduce:transform-none\">\n              -&gt;\n            </span>\n          </h2>\n          <p className={`m-0 max-w-[30ch] text-sm opacity-50 text-balance`}>\n            Instantly deploy your Next.js site to a shareable URL with Vercel.\n          </p>\n        </a>\n      </div>\n    </main>\n  );\n}\n"
  },
  {
    "path": "Video 128/dynamic-routes/jsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"paths\": {\n      \"@/*\": [\"./*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "Video 128/dynamic-routes/next.config.mjs",
    "content": "/** @type {import('next').NextConfig} */\nconst nextConfig = {};\n\nexport default nextConfig;\n"
  },
  {
    "path": "Video 128/dynamic-routes/package.json",
    "content": "{\n  \"name\": \"dynamic-routes\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"build\": \"next build\",\n    \"start\": \"next start\",\n    \"lint\": \"next lint\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18\",\n    \"react-dom\": \"^18\",\n    \"next\": \"14.1.0\"\n  },\n  \"devDependencies\": {\n    \"autoprefixer\": \"^10.0.1\",\n    \"postcss\": \"^8\",\n    \"tailwindcss\": \"^3.3.0\",\n    \"eslint\": \"^8\",\n    \"eslint-config-next\": \"14.1.0\"\n  }\n}\n"
  },
  {
    "path": "Video 128/dynamic-routes/postcss.config.js",
    "content": "module.exports = {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {},\n  },\n};\n"
  },
  {
    "path": "Video 128/dynamic-routes/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\n    \"./pages/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./components/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./app/**/*.{js,ts,jsx,tsx,mdx}\",\n  ],\n  theme: {\n    extend: {\n      backgroundImage: {\n        \"gradient-radial\": \"radial-gradient(var(--tw-gradient-stops))\",\n        \"gradient-conic\":\n          \"conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))\",\n      },\n    },\n  },\n  plugins: [],\n};\n"
  },
  {
    "path": "Video 129/layouts/.eslintrc.json",
    "content": "{\n  \"extends\": \"next/core-web-vitals\"\n}\n"
  },
  {
    "path": "Video 129/layouts/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n.yarn/install-state.gz\n\n# testing\n/coverage\n\n# next.js\n/.next/\n/out/\n\n# production\n/build\n\n# misc\n.DS_Store\n*.pem\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# local env files\n.env*.local\n\n# vercel\n.vercel\n\n# typescript\n*.tsbuildinfo\nnext-env.d.ts\n"
  },
  {
    "path": "Video 129/layouts/README.md",
    "content": "This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).\n\n## Getting Started\n\nFirst, run the development server:\n\n```bash\nnpm run dev\n# or\nyarn dev\n# or\npnpm dev\n# or\nbun dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) with your browser to see the result.\n\nYou can start editing the page by modifying `app/page.js`. The page auto-updates as you edit the file.\n\nThis project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.\n\n## Learn More\n\nTo learn more about Next.js, take a look at the following resources:\n\n- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.\n- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.\n\nYou can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!\n\n## Deploy on Vercel\n\nThe easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.\n\nCheck out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.\n"
  },
  {
    "path": "Video 129/layouts/app/(admin)/admincomments/page.js",
    "content": "import React from 'react'\n\nconst Comment = () => {\n  return (\n    <div>\n      Comments\n    </div>\n  )\n}\n\nexport default Comment\n"
  },
  {
    "path": "Video 129/layouts/app/(admin)/adminlogin/page.js",
    "content": "import React from 'react'\n\nconst page = () => {\n  return (\n    <div>\n      Admin Login \n      <p>Feel free to login as an Admin</p>\n    </div>\n  )\n}\n\nexport default page\n\n\n// or Dynamic metadata\nexport async function generateMetadata({ params }) {\n  return {\n    title: 'AdminLogin Facebook - Connect with friends and the world around you',\n  }\n}"
  },
  {
    "path": "Video 129/layouts/app/(admin)/adminlogout/layout.js",
    "content": "import { Inter } from \"next/font/google\"; \nimport Navbar from \"@/components/Navbar\";\nimport Footer from \"@/components/Footer\";\n\nconst inter = Inter({ subsets: [\"latin\"] });\n\nexport const metadata = {\n  title: \"Logout\",\n  description: \"Admin Page: Facebook is a social utility that connects people with friends and others who work, study and live around them. People use Facebook to keep up with friends, upload an unlimited number of photos, post links and videos, and learn more about the people they meet.\",\n};\n\nexport default function AdminLayout({ children }) {\n  return (\n     <>\n     <span>Logout Navbar</span>\n        {children} \n     </>\n  );\n}\n"
  },
  {
    "path": "Video 129/layouts/app/(admin)/adminlogout/page.js",
    "content": "import React from 'react'\n\nconst page = () => {\n  return (\n    <div>\n      Logout\n    </div>\n  )\n}\n\nexport default page\n"
  },
  {
    "path": "Video 129/layouts/app/(admin)/layout.js",
    "content": "import { Inter } from \"next/font/google\"; \nimport Navbar from \"@/components/Navbar\";\nimport Footer from \"@/components/Footer\";\n\nconst inter = Inter({ subsets: [\"latin\"] });\n\nexport const metadata = {\n  title: \"Admin: Facebook - Connect with friends and the world around you\",\n  description: \"Admin Page: Facebook is a social utility that connects people with friends and others who work, study and live around them. People use Facebook to keep up with friends, upload an unlimited number of photos, post links and videos, and learn more about the people they meet.\",\n};\n\nexport default function AdminLayout({ children }) {\n  return (\n     <>\n     <span>Admin Navbar</span>\n        {children} \n     </>\n  );\n}\n"
  },
  {
    "path": "Video 129/layouts/app/about/page.js",
    "content": "import React from 'react'\n\nconst page = () => {\n  return (\n    <div>\n      Facebook is a social utility that connects people with friends and others who work, study and live around them. People use Facebook to keep up with friends, upload an unlimited number of photos, post links and videos, and learn more about the people they meet.\n    </div>\n  )\n}\n\nexport default page\n"
  },
  {
    "path": "Video 129/layouts/app/globals.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n:root {\n  --foreground-rgb: 0, 0, 0;\n  --background-start-rgb: 214, 219, 220;\n  --background-end-rgb: 255, 255, 255;\n}\n\n@media (prefers-color-scheme: dark) {\n  :root {\n    --foreground-rgb: 255, 255, 255;\n    --background-start-rgb: 0, 0, 0;\n    --background-end-rgb: 0, 0, 0;\n  }\n}\n\nbody {\n  color: rgb(var(--foreground-rgb));\n  background: linear-gradient(\n      to bottom,\n      transparent,\n      rgb(var(--background-end-rgb))\n    )\n    rgb(var(--background-start-rgb));\n}\n\n@layer utilities {\n  .text-balance {\n    text-wrap: balance;\n  }\n}\n"
  },
  {
    "path": "Video 129/layouts/app/layout.js",
    "content": "import { Inter } from \"next/font/google\";\nimport \"./globals.css\";\nimport Navbar from \"@/components/Navbar\";\nimport Footer from \"@/components/Footer\";\n\nconst inter = Inter({ subsets: [\"latin\"] });\n\nexport const metadata = {\n  title: \"Facebook - Connect with friends and the world around you\",\n  description: \"Facebook is a social utility that connects people with friends and others who work, study and live around them. People use Facebook to keep up with friends, upload an unlimited number of photos, post links and videos, and learn more about the people they meet.\",\n};\n\nexport default function RootLayout({ children }) {\n  return (\n    <html lang=\"en\">\n      <body className={inter.className}>\n        <Navbar />\n        {children}\n        <Footer />\n      </body>\n    </html>\n  );\n}\n"
  },
  {
    "path": "Video 129/layouts/app/page.js",
    "content": "import Image from \"next/image\";\n\nexport default function Home() {\n  return (\n    <div className=\"hompage\">\n      I am homepage\n    </div>\n  );\n}\n"
  },
  {
    "path": "Video 129/layouts/components/Footer.js",
    "content": "import React from 'react'\n\nconst Footer = () => {\n    return (\n        <footer className=\"bg-gray-800 text-white p-4\">\n            <div className=\"container mx-auto\">\n                Footer\n            </div>\n        </footer>\n    )\n}\n\nexport default Footer\n"
  },
  {
    "path": "Video 129/layouts/components/Navbar.js",
    "content": "import Link from 'next/link'\n\nconst Navbar = () => {\n  return (\n    <nav className=\"flex items-center justify-between p-6 bg-blue-500\">\n      <div>\n      <Link className=\"text-white text-lg mx-2\" href=\"/\"> Home \n      </Link>\n        <Link className=\"text-white text-lg mx-2\" href=\"/about\">\n          About\n        </Link>\n        <Link className=\"text-white text-lg mx-2\" href=\"/contact\"> Contact \n        </Link>\n      </div>\n    </nav>\n  )\n}\n\nexport default Navbar"
  },
  {
    "path": "Video 129/layouts/jsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"paths\": {\n      \"@/*\": [\"./*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "Video 129/layouts/next.config.mjs",
    "content": "/** @type {import('next').NextConfig} */\nconst nextConfig = {};\n\nexport default nextConfig;\n"
  },
  {
    "path": "Video 129/layouts/package.json",
    "content": "{\n  \"name\": \"layouts\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"build\": \"next build\",\n    \"start\": \"next start\",\n    \"lint\": \"next lint\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18\",\n    \"react-dom\": \"^18\",\n    \"next\": \"14.1.0\"\n  },\n  \"devDependencies\": {\n    \"autoprefixer\": \"^10.0.1\",\n    \"postcss\": \"^8\",\n    \"tailwindcss\": \"^3.3.0\",\n    \"eslint\": \"^8\",\n    \"eslint-config-next\": \"14.1.0\"\n  }\n}\n"
  },
  {
    "path": "Video 129/layouts/postcss.config.js",
    "content": "module.exports = {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {},\n  },\n};\n"
  },
  {
    "path": "Video 129/layouts/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\n    \"./pages/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./components/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./app/**/*.{js,ts,jsx,tsx,mdx}\",\n  ],\n  theme: {\n    extend: {\n      backgroundImage: {\n        \"gradient-radial\": \"radial-gradient(var(--tw-gradient-stops))\",\n        \"gradient-conic\":\n          \"conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))\",\n      },\n    },\n  },\n  plugins: [],\n};\n"
  },
  {
    "path": "Video 13/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n<body>\n    3>4\n    this is the code for paragraph &lt;p&gt;&lt;/p&gt;\n    <pre>\n        <p>This is a para</p>\n\n\n\n        this is after few new lines           and some more\n    </pre>\n\n   Copyright &copy;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;codewithharry\n\n   <blockquote cite=\"source-url\">\n    Quotation text here.\n  </blockquote>\n<h1>This is html boilerplate code</h1>\n  <pre><code>\n&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n    &lt;meta charset=\"UTF-8\"&gt;\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\n    &lt;title&gt;Document&lt;/title&gt;\n&lt;/head&gt;\n&lt;body&gt;\n    \n&lt;/body&gt;\n&lt;/html&gt;\n  </code></pre>\n</body>\n</html>"
  },
  {
    "path": "Video 130/passop/.eslintrc.cjs",
    "content": "module.exports = {\n  root: true,\n  env: { browser: true, es2020: true },\n  extends: [\n    'eslint:recommended',\n    'plugin:react/recommended',\n    'plugin:react/jsx-runtime',\n    'plugin:react-hooks/recommended',\n  ],\n  ignorePatterns: ['dist', '.eslintrc.cjs'],\n  parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },\n  settings: { react: { version: '18.2' } },\n  plugins: ['react-refresh'],\n  rules: {\n    'react/jsx-no-target-blank': 'off',\n    'react-refresh/only-export-components': [\n      'warn',\n      { allowConstantExport: true },\n    ],\n  },\n}\n"
  },
  {
    "path": "Video 130/passop/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n"
  },
  {
    "path": "Video 130/passop/README.md",
    "content": "# React + Vite\n\nThis template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.\n\nCurrently, two official plugins are available:\n\n- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh\n- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh\n"
  },
  {
    "path": "Video 130/passop/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" type=\"image/png\" href=\"/favicon.png\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>PassOP - Your own password manager</title>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script src=\"https://cdn.lordicon.com/lordicon.js\"></script>\n    <script type=\"module\" src=\"/src/main.jsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "Video 130/passop/package.json",
    "content": "{\n  \"name\": \"passop\",\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"vite build\",\n    \"lint\": \"eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0\",\n    \"preview\": \"vite preview\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\",\n    \"react-toastify\": \"^9.1.3\",\n    \"uuid\": \"^9.0.1\"\n  },\n  \"devDependencies\": {\n    \"@types/react\": \"^18.2.56\",\n    \"@types/react-dom\": \"^18.2.19\",\n    \"@vitejs/plugin-react\": \"^4.2.1\",\n    \"autoprefixer\": \"^10.4.18\",\n    \"eslint\": \"^8.56.0\",\n    \"eslint-plugin-react\": \"^7.33.2\",\n    \"eslint-plugin-react-hooks\": \"^4.6.0\",\n    \"eslint-plugin-react-refresh\": \"^0.4.5\",\n    \"postcss\": \"^8.4.35\",\n    \"tailwindcss\": \"^3.4.1\",\n    \"vite\": \"^5.1.4\"\n  }\n}\n"
  },
  {
    "path": "Video 130/passop/postcss.config.js",
    "content": "export default {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {},\n  },\n}\n"
  },
  {
    "path": "Video 130/passop/src/App.css",
    "content": ""
  },
  {
    "path": "Video 130/passop/src/App.jsx",
    "content": "import { useState } from 'react' \nimport './App.css'\nimport Navbar from './components/Navbar'\nimport Manager from './components/Manager'\nimport Footer from './components/Footer'\n\nfunction App() { \n\n  return (\n    <>\n        <Navbar /> \n        <div className=\"bg-green-50 bg-[linear-gradient(to_right,#8080800a_1px,transparent_1px),linear-gradient(to_bottom,#8080800a_1px,transparent_1px)] bg-[size:14px_24px]\">\n\n       <Manager/> \n        </div>\n       <Footer/>\n    </>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "Video 130/passop/src/components/Footer.jsx",
    "content": "import React from 'react'\n\nconst Footer = () => {\n    return (\n        <div className='bg-slate-800 text-white flex flex-col justify-center items-center  w-full'>\n            <div className=\"logo font-bold text-white text-2xl\">\n                <span className='text-green-500'> &lt;</span>\n\n                <span>Pass</span><span className='text-green-500'>OP/&gt;</span>\n\n\n            </div>\n            <div className='flex justify-center items-center'> Created with <img className='w-7 mx-2' src=\"icons/heart.png\" alt=\"\" /> by CodeWithHarry </div>\n        </div>\n    )\n}\n\nexport default Footer\n"
  },
  {
    "path": "Video 130/passop/src/components/Manager.jsx",
    "content": "import React from 'react'\nimport { useRef, useState, useEffect } from 'react';\nimport { ToastContainer, toast } from 'react-toastify';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport 'react-toastify/dist/ReactToastify.css';\n\nconst Manager = () => {\n    const ref = useRef()\n    const passwordRef = useRef()\n    const [form, setform] = useState({ site: \"\", username: \"\", password: \"\" })\n    const [passwordArray, setPasswordArray] = useState([])\n\n    useEffect(() => {\n        let passwords = localStorage.getItem(\"passwords\");\n        if (passwords) {\n            setPasswordArray(JSON.parse(passwords))\n        }\n    }, [])\n\n    const copyText = (text) => {\n        toast('Copied to clipboard!', {\n            position: \"top-right\",\n            autoClose: 5000,\n            hideProgressBar: false,\n            closeOnClick: true,\n            pauseOnHover: true,\n            draggable: true,\n            progress: undefined,\n            theme: \"dark\",\n        });\n        navigator.clipboard.writeText(text)\n    }\n\n\n\n    const showPassword = () => {\n        passwordRef.current.type = \"text\"\n        console.log(ref.current.src)\n        if (ref.current.src.includes(\"icons/eyecross.png\")) {\n            ref.current.src = \"icons/eye.png\"\n            passwordRef.current.type = \"password\"\n        }\n        else {\n            passwordRef.current.type = \"text\"\n            ref.current.src = \"icons/eyecross.png\"\n        }\n\n    }\n\n    const savePassword = () => {\n        if(form.site.length >3 && form.username.length >3 &&form.password.length >3){\n\n            setPasswordArray([...passwordArray, {...form, id: uuidv4()}])\n            localStorage.setItem(\"passwords\", JSON.stringify([...passwordArray, {...form, id: uuidv4()}]))\n            console.log([...passwordArray, form])\n            setform({ site: \"\", username: \"\", password: \"\" })\n            toast('Password saved!', {\n            position: \"top-right\",\n            autoClose: 5000,\n            hideProgressBar: false,\n            closeOnClick: true,\n            pauseOnHover: true,\n            draggable: true,\n            progress: undefined,\n            theme: \"dark\",\n        });\n    }\n    else{\n        toast('Error: Password not saved!');\n    }\n\n    }\n\n    const deletePassword = (id) => {\n        console.log(\"Deleting password with id \", id)\n        let c = confirm(\"Do you really want to delete this password?\")\n        if(c){\n            setPasswordArray(passwordArray.filter(item=>item.id!==id))\n            localStorage.setItem(\"passwords\", JSON.stringify(passwordArray.filter(item=>item.id!==id))) \n            toast('Password Deleted!', {\n                position: \"top-right\",\n                autoClose: 5000,\n                hideProgressBar: false,\n                closeOnClick: true,\n                pauseOnHover: true,\n                draggable: true,\n                progress: undefined,\n                theme: \"dark\",\n            });\n        }\n            \n    }\n    const editPassword = (id) => {\n         \n        console.log(\"Editing password with id \", id)\n        setform(passwordArray.filter(i=>i.id===id)[0]) \n        setPasswordArray(passwordArray.filter(item=>item.id!==id)) \n\n    }\n\n\n\n    const handleChange = (e) => {\n        setform({ ...form, [e.target.name]: e.target.value })\n    }\n\n\n\n    return (\n        <>\n            <ToastContainer\n                position=\"top-right\"\n                autoClose={5000}\n                hideProgressBar={false}\n                newestOnTop={false}\n                closeOnClick\n                rtl={false}\n                pauseOnFocusLoss\n                draggable\n                pauseOnHover\n                theme=\"light\"\n                transition=\"Bounce\"\n            />\n            {/* Same as */}\n            <ToastContainer />\n            <div className=\"absolute inset-0 -z-10 h-full w-full bg-green-50 bg-[linear-gradient(to_right,#8080800a_1px,transparent_1px),linear-gradient(to_bottom,#8080800a_1px,transparent_1px)] bg-[size:14px_24px]\"><div className=\"absolute left-0 right-0 top-0 -z-10 m-auto h-[310px] w-[310px] rounded-full bg-green-400 opacity-20 blur-[100px]\"></div></div>\n            <div className=\" p-3 md:mycontainer min-h-[88.2vh] \">\n                <h1 className='text-4xl text font-bold text-center'>\n                    <span className='text-green-500'> &lt;</span>\n\n                    <span>Pass</span><span className='text-green-500'>OP/&gt;</span>\n\n                </h1>\n                <p className='text-green-900 text-lg text-center'>Your own Password Manager</p>\n\n                <div className=\"flex flex-col p-4 text-black gap-8 items-center\">\n                    <input value={form.site} onChange={handleChange} placeholder='Enter website URL' className='rounded-full border border-green-500 w-full p-4 py-1' type=\"text\" name=\"site\" id=\"site\" />\n                    <div className=\"flex flex-col md:flex-row w-full justify-between gap-8\">\n                        <input value={form.username} onChange={handleChange} placeholder='Enter Username' className='rounded-full border border-green-500 w-full p-4 py-1' type=\"text\" name=\"username\" id=\"username\" />\n                        <div className=\"relative\">\n\n                            <input ref={passwordRef} value={form.password} onChange={handleChange} placeholder='Enter Password' className='rounded-full border border-green-500 w-full p-4 py-1' type=\"password\" name=\"password\" id=\"password\" />\n                            <span className='absolute right-[3px] top-[4px] cursor-pointer' onClick={showPassword}>\n                                <img ref={ref} className='p-1' width={26} src=\"icons/eye.png\" alt=\"eye\" />\n                            </span>\n                        </div>\n\n                    </div>\n                    <button onClick={savePassword} className='flex justify-center items-center gap-2 bg-green-400 hover:bg-green-300 rounded-full px-8 py-2 w-fit border border-green-900'>\n                        <lord-icon\n                            src=\"https://cdn.lordicon.com/jgnvfzqg.json\"\n                            trigger=\"hover\" >\n                        </lord-icon>\n                        Save</button>\n                </div>\n\n                <div className=\"passwords\">\n                    <h2 className='font-bold text-2xl py-4'>Your Passwords</h2>\n                    {passwordArray.length === 0 && <div> No passwords to show</div>}\n                    {passwordArray.length != 0 && <table className=\"table-auto w-full rounded-md overflow-hidden mb-10\">\n                        <thead className='bg-green-800 text-white'>\n                            <tr>\n                                <th className='py-2'>Site</th>\n                                <th className='py-2'>Username</th>\n                                <th className='py-2'>Password</th>\n                                <th className='py-2'>Actions</th>\n                            </tr>\n                        </thead>\n                        <tbody className='bg-green-100'>\n                            {passwordArray.map((item, index) => {\n                                return <tr key={index}>\n                                    <td className='py-2 border border-white text-center'>\n                                        <div className='flex items-center justify-center '>\n                                            <a href={item.site} target='_blank'>{item.site}</a>\n                                            <div className='lordiconcopy size-7 cursor-pointer' onClick={() => { copyText(item.site) }}>\n                                                <lord-icon\n                                                    style={{ \"width\": \"25px\", \"height\": \"25px\", \"paddingTop\": \"3px\", \"paddingLeft\": \"3px\" }}\n                                                    src=\"https://cdn.lordicon.com/iykgtsbt.json\"\n                                                    trigger=\"hover\" >\n                                                </lord-icon>\n                                            </div>\n                                        </div>\n                                    </td>\n                                    <td className='py-2 border border-white text-center'>\n                                        <div className='flex items-center justify-center '>\n                                            <span>{item.username}</span>\n                                            <div className='lordiconcopy size-7 cursor-pointer' onClick={() => { copyText(item.username) }}>\n                                                <lord-icon\n                                                    style={{ \"width\": \"25px\", \"height\": \"25px\", \"paddingTop\": \"3px\", \"paddingLeft\": \"3px\" }}\n                                                    src=\"https://cdn.lordicon.com/iykgtsbt.json\"\n                                                    trigger=\"hover\" >\n                                                </lord-icon>\n                                            </div>\n                                        </div>\n                                    </td>\n                                    <td className='py-2 border border-white text-center'>\n                                        <div className='flex items-center justify-center '>\n                                            <span>{item.password}</span>\n                                            <div className='lordiconcopy size-7 cursor-pointer' onClick={() => { copyText(item.password) }}>\n                                                <lord-icon\n                                                    style={{ \"width\": \"25px\", \"height\": \"25px\", \"paddingTop\": \"3px\", \"paddingLeft\": \"3px\" }}\n                                                    src=\"https://cdn.lordicon.com/iykgtsbt.json\"\n                                                    trigger=\"hover\" >\n                                                </lord-icon>\n                                            </div>\n                                        </div>\n                                    </td>\n                                    <td className='justify-center py-2 border border-white text-center'>\n                                        <span className='cursor-pointer mx-1' onClick={()=>{editPassword(item.id)}}>\n                                            <lord-icon\n                                                src=\"https://cdn.lordicon.com/gwlusjdu.json\"\n                                                trigger=\"hover\"\n                                                style={{\"width\":\"25px\", \"height\":\"25px\"}}>\n                                            </lord-icon>\n                                        </span>\n                                        <span className='cursor-pointer mx-1'onClick={()=>{deletePassword(item.id)}}>\n                                            <lord-icon\n                                                src=\"https://cdn.lordicon.com/skkahier.json\"\n                                                trigger=\"hover\"\n                                                style={{\"width\":\"25px\", \"height\":\"25px\"}}>\n                                            </lord-icon>\n                                        </span>\n                                    </td>\n                                </tr>\n\n                            })}\n                        </tbody>\n                    </table>}\n                </div>\n            </div>\n\n        </>\n    )\n}\n\nexport default Manager\n"
  },
  {
    "path": "Video 130/passop/src/components/Navbar.jsx",
    "content": "import React from 'react'\n\nconst Navbar = () => {\n    return (\n        <nav className='bg-slate-800 text-white '>\n            <div className=\"mycontainer flex justify-between items-center px-4 py-5 h-14\">\n\n                <div className=\"logo font-bold text-white text-2xl\">\n                    <span className='text-green-500'> &lt;</span>\n                   \n                    <span>Pass</span><span className='text-green-500'>OP/&gt;</span>\n                  \n                    \n                    </div>\n                {/* <ul>\n                    <li className='flex gap-4 '>\n                        <a className='hover:font-bold' href='/'>Home</a>\n                        <a className='hover:font-bold' href='#'>About</a>\n                        <a className='hover:font-bold' href='#'>Contact</a>\n                    </li>\n                </ul> */}\n                <button className='text-white bg-green-700 my-5 mx-2 rounded-full flex  justify-between items-center ring-white ring-1'> \n                    <img className='invert  w-10 p-1' src=\"/icons/github.svg\" alt=\"github logo\" />\n                    <span className='font-bold px-2'>GitHub</span>\n                    \n                </button>\n            </div>\n        </nav>\n    )\n}\n\nexport default Navbar\n"
  },
  {
    "path": "Video 130/passop/src/index.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n \n\n@layer components {\n  .mycontainer {\n    @apply container px-40 py-16 mx-auto ;\n  }\n}"
  },
  {
    "path": "Video 130/passop/src/main.jsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App.jsx'\nimport './index.css'\n\nReactDOM.createRoot(document.getElementById('root')).render(\n  <React.StrictMode>\n    <App />\n  </React.StrictMode>,\n)\n"
  },
  {
    "path": "Video 130/passop/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nexport default {\n  content: [\n    \"./index.html\",\n    \"./src/**/*.{js,ts,jsx,tsx}\",\n  ],\n  theme: {\n    extend: {},\n  },\n  plugins: [],\n}"
  },
  {
    "path": "Video 130/passop/vite.config.js",
    "content": "import { defineConfig } from 'vite'\nimport react from '@vitejs/plugin-react'\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n  plugins: [react()],\n})\n"
  },
  {
    "path": "Video 130/passop-mongo/.eslintrc.cjs",
    "content": "module.exports = {\n  root: true,\n  env: { browser: true, es2020: true },\n  extends: [\n    'eslint:recommended',\n    'plugin:react/recommended',\n    'plugin:react/jsx-runtime',\n    'plugin:react-hooks/recommended',\n  ],\n  ignorePatterns: ['dist', '.eslintrc.cjs'],\n  parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },\n  settings: { react: { version: '18.2' } },\n  plugins: ['react-refresh'],\n  rules: {\n    'react/jsx-no-target-blank': 'off',\n    'react-refresh/only-export-components': [\n      'warn',\n      { allowConstantExport: true },\n    ],\n  },\n}\n"
  },
  {
    "path": "Video 130/passop-mongo/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n"
  },
  {
    "path": "Video 130/passop-mongo/README.md",
    "content": "# React + Vite\n\nThis template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.\n\nCurrently, two official plugins are available:\n\n- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh\n- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh\n"
  },
  {
    "path": "Video 130/passop-mongo/backend/package.json",
    "content": "{\n  \"name\": \"backend\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"keywords\": [],\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"body-parser\": \"^1.20.2\",\n    \"cors\": \"^2.8.5\",\n    \"dotenv\": \"^16.4.5\",\n    \"express\": \"^4.18.3\",\n    \"mongodb\": \"^6.4.0\"\n  }\n}\n"
  },
  {
    "path": "Video 130/passop-mongo/backend/server.js",
    "content": "const express = require('express')\nconst dotenv = require('dotenv')\nconst { MongoClient } = require('mongodb'); \nconst bodyparser = require('body-parser')\nconst cors = require('cors')\n\ndotenv.config()\n\n\n// Connecting to the MongoDB Client\nconst url = process.env.MONGO_URI;\nconst client = new MongoClient(url);\nclient.connect();\n\n// App & Database\nconst dbName = process.env.DB_NAME \nconst app = express()\nconst port = 3000 \n\n// Middleware\napp.use(bodyparser.json())\napp.use(cors())\n\n\n// Get all the passwords\napp.get('/', async (req, res) => {\n    const db = client.db(dbName);\n    const collection = db.collection('passwords');\n    const findResult = await collection.find({}).toArray();\n    res.json(findResult)\n})\n\n// Save a password\napp.post('/', async (req, res) => { \n    const password = req.body\n    const db = client.db(dbName);\n    const collection = db.collection('passwords');\n    const findResult = await collection.insertOne(password);\n    res.send({success: true, result: findResult})\n})\n\n// Delete a password by id\napp.delete('/', async (req, res) => { \n    const password = req.body\n    const db = client.db(dbName);\n    const collection = db.collection('passwords');\n    const findResult = await collection.deleteOne(password);\n    res.send({success: true, result: findResult})\n})\n\n\napp.listen(port, () => {\n    console.log(`Example app listening on  http://localhost:${port}`)\n})"
  },
  {
    "path": "Video 130/passop-mongo/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" type=\"image/png\" href=\"/favicon.png\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>PassOP - Your own password manager</title>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script src=\"https://cdn.lordicon.com/lordicon.js\"></script>\n    <script type=\"module\" src=\"/src/main.jsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "Video 130/passop-mongo/package.json",
    "content": "{\n  \"name\": \"passop\",\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"vite build\",\n    \"lint\": \"eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0\",\n    \"preview\": \"vite preview\"\n  },\n  \"dependencies\": {\n    \"dotenv\": \"^16.4.5\",\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\",\n    \"react-toastify\": \"^9.1.3\",\n    \"uuid\": \"^9.0.1\"\n  },\n  \"devDependencies\": {\n    \"@types/react\": \"^18.2.56\",\n    \"@types/react-dom\": \"^18.2.19\",\n    \"@vitejs/plugin-react\": \"^4.2.1\",\n    \"autoprefixer\": \"^10.4.18\",\n    \"eslint\": \"^8.56.0\",\n    \"eslint-plugin-react\": \"^7.33.2\",\n    \"eslint-plugin-react-hooks\": \"^4.6.0\",\n    \"eslint-plugin-react-refresh\": \"^0.4.5\",\n    \"postcss\": \"^8.4.35\",\n    \"tailwindcss\": \"^3.4.1\",\n    \"vite\": \"^5.1.4\"\n  }\n}\n"
  },
  {
    "path": "Video 130/passop-mongo/postcss.config.js",
    "content": "export default {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {},\n  },\n}\n"
  },
  {
    "path": "Video 130/passop-mongo/src/App.css",
    "content": ""
  },
  {
    "path": "Video 130/passop-mongo/src/App.jsx",
    "content": "import { useState } from 'react'\nimport './App.css'\nimport Navbar from './components/Navbar'\nimport Manager from './components/Manager'\nimport Footer from './components/Footer'\n\nfunction App() {\n\n  return (\n    <>\n      <Navbar />\n      <div className=\"bg-green-50 bg-[linear-gradient(to_right,#8080800a_1px,transparent_1px),linear-gradient(to_bottom,#8080800a_1px,transparent_1px)] bg-[size:14px_24px]\">\n        <Manager />\n      </div>\n      <Footer />\n    </>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "Video 130/passop-mongo/src/components/Footer.jsx",
    "content": "import React from 'react'\n\nconst Footer = () => {\n    return (\n        <div className='bg-slate-800 text-white flex flex-col justify-center items-center  w-full'>\n            <div className=\"logo font-bold text-white text-2xl\">\n                <span className='text-green-500'> &lt;</span>\n                <span>Pass</span><span className='text-green-500'>OP/&gt;</span>\n            </div>\n            <div className='flex justify-center items-center'> Created with <img className='w-7 mx-2' src=\"icons/heart.png\" alt=\"\" /> by CodeWithHarry </div>\n        </div>\n    )\n}\n\nexport default Footer\n"
  },
  {
    "path": "Video 130/passop-mongo/src/components/Manager.jsx",
    "content": "import React from 'react'\nimport { useRef, useState, useEffect } from 'react';\nimport { ToastContainer, toast } from 'react-toastify';\nimport { v4 as uuidv4 } from 'uuid';\nimport 'react-toastify/dist/ReactToastify.css';\n\nconst Manager = () => {\n    const ref = useRef()\n    const passwordRef = useRef()\n    const [form, setform] = useState({ site: \"\", username: \"\", password: \"\" })\n    const [passwordArray, setPasswordArray] = useState([])\n\n    const getPasswords = async () => {\n        let req = await fetch(\"http://localhost:3000/\")\n        let passwords = await req.json()\n        setPasswordArray(passwords)\n    }\n\n\n    useEffect(() => {\n        getPasswords()\n    }, [])\n\n\n    const copyText = (text) => {\n        toast('Copied to clipboard!', {\n            position: \"top-right\",\n            autoClose: 5000,\n            hideProgressBar: false,\n            closeOnClick: true,\n            pauseOnHover: true,\n            draggable: true,\n            progress: undefined,\n            theme: \"dark\",\n        });\n        navigator.clipboard.writeText(text)\n    }\n\n    const showPassword = () => {\n        passwordRef.current.type = \"text\"\n        console.log(ref.current.src)\n        if (ref.current.src.includes(\"icons/eyecross.png\")) {\n            ref.current.src = \"icons/eye.png\"\n            passwordRef.current.type = \"password\"\n        }\n        else {\n            passwordRef.current.type = \"text\"\n            ref.current.src = \"icons/eyecross.png\"\n        }\n\n    }\n\n    const savePassword = async () => {\n        if (form.site.length > 3 && form.username.length > 3 && form.password.length > 3) {\n\n            // If any such id exists in the db, delete it \n            await fetch(\"http://localhost:3000/\", { method: \"DELETE\", headers: { \"Content-Type\": \"application/json\" }, body: JSON.stringify({ id: form.id }) })\n\n            setPasswordArray([...passwordArray, { ...form, id: uuidv4() }])\n            await fetch(\"http://localhost:3000/\", { method: \"POST\", headers: { \"Content-Type\": \"application/json\" }, body: JSON.stringify({ ...form, id: uuidv4() }) })\n\n            // Otherwise clear the form and show toast\n            setform({ site: \"\", username: \"\", password: \"\" })\n            toast('Password saved!', {\n                position: \"top-right\",\n                autoClose: 5000,\n                hideProgressBar: false,\n                closeOnClick: true,\n                pauseOnHover: true,\n                draggable: true,\n                progress: undefined,\n                theme: \"dark\",\n            });\n        }\n        else {\n            toast('Error: Password not saved!');\n        }\n\n    }\n\n    const deletePassword = async (id) => {\n        console.log(\"Deleting password with id \", id)\n        let c = confirm(\"Do you really want to delete this password?\")\n        if (c) {\n            setPasswordArray(passwordArray.filter(item => item.id !== id))\n            \n            await fetch(\"http://localhost:3000/\", { method: \"DELETE\", headers: { \"Content-Type\": \"application/json\" }, body: JSON.stringify({ id }) })\n\n            toast('Password Deleted!', {\n                position: \"top-right\",\n                autoClose: 5000,\n                hideProgressBar: false,\n                closeOnClick: true, \n                draggable: true,\n                progress: undefined,\n                theme: \"dark\",\n            });\n        }\n\n    }\n\n    const editPassword = (id) => {\n        setform({ ...passwordArray.filter(i => i.id === id)[0], id: id })\n        setPasswordArray(passwordArray.filter(item => item.id !== id))\n    }\n\n\n    const handleChange = (e) => {\n        setform({ ...form, [e.target.name]: e.target.value })\n    }\n\n\n    return (\n        <>\n            <ToastContainer />\n            <div className=\"absolute inset-0 -z-10 h-full w-full bg-green-50 bg-[linear-gradient(to_right,#8080800a_1px,transparent_1px),linear-gradient(to_bottom,#8080800a_1px,transparent_1px)] bg-[size:14px_24px]\"><div className=\"absolute left-0 right-0 top-0 -z-10 m-auto h-[310px] w-[310px] rounded-full bg-green-400 opacity-20 blur-[100px]\"></div></div>\n            <div className=\" p-3 md:mycontainer min-h-[88.2vh] \">\n                <h1 className='text-4xl text font-bold text-center'>\n                    <span className='text-green-500'> &lt;</span>\n\n                    <span>Pass</span><span className='text-green-500'>OP/&gt;</span>\n\n                </h1>\n                <p className='text-green-900 text-lg text-center'>Your own Password Manager</p>\n\n                <div className=\"flex flex-col p-4 text-black gap-8 items-center\">\n                    <input value={form.site} onChange={handleChange} placeholder='Enter website URL' className='rounded-full border border-green-500 w-full p-4 py-1' type=\"text\" name=\"site\" id=\"site\" />\n                    <div className=\"flex flex-col md:flex-row w-full justify-between gap-8\">\n                        <input value={form.username} onChange={handleChange} placeholder='Enter Username' className='rounded-full border border-green-500 w-full p-4 py-1' type=\"text\" name=\"username\" id=\"username\" />\n                        <div className=\"relative\">\n                            <input ref={passwordRef} value={form.password} onChange={handleChange} placeholder='Enter Password' className='rounded-full border border-green-500 w-full p-4 py-1' type=\"password\" name=\"password\" id=\"password\" />\n                            <span className='absolute right-[3px] top-[4px] cursor-pointer' onClick={showPassword}>\n                                <img ref={ref} className='p-1' width={26} src=\"icons/eye.png\" alt=\"eye\" />\n                            </span>\n                        </div>\n\n                    </div>\n                    <button onClick={savePassword} className='flex justify-center items-center gap-2 bg-green-400 hover:bg-green-300 rounded-full px-8 py-2 w-fit border border-green-900'>\n                        <lord-icon\n                            src=\"https://cdn.lordicon.com/jgnvfzqg.json\"\n                            trigger=\"hover\" >\n                        </lord-icon>\n                        Save</button>\n                </div>\n\n                <div className=\"passwords\">\n                    <h2 className='font-bold text-2xl py-4'>Your Passwords</h2>\n                    {passwordArray.length === 0 && <div> No passwords to show</div>}\n                    {passwordArray.length != 0 && <table className=\"table-auto w-full rounded-md overflow-hidden mb-10\">\n                        <thead className='bg-green-800 text-white'>\n                            <tr>\n                                <th className='py-2'>Site</th>\n                                <th className='py-2'>Username</th>\n                                <th className='py-2'>Password</th>\n                                <th className='py-2'>Actions</th>\n                            </tr>\n                        </thead>\n                        <tbody className='bg-green-100'>\n                            {passwordArray.map((item, index) => {\n                                return <tr key={index}>\n                                    <td className='py-2 border border-white text-center'>\n                                        <div className='flex items-center justify-center '>\n                                            <a href={item.site} target='_blank'>{item.site}</a>\n                                            <div className='lordiconcopy size-7 cursor-pointer' onClick={() => { copyText(item.site) }}>\n                                                <lord-icon\n                                                    style={{ \"width\": \"25px\", \"height\": \"25px\", \"paddingTop\": \"3px\", \"paddingLeft\": \"3px\" }}\n                                                    src=\"https://cdn.lordicon.com/iykgtsbt.json\"\n                                                    trigger=\"hover\" >\n                                                </lord-icon>\n                                            </div>\n                                        </div>\n                                    </td>\n                                    <td className='py-2 border border-white text-center'>\n                                        <div className='flex items-center justify-center '>\n                                            <span>{item.username}</span>\n                                            <div className='lordiconcopy size-7 cursor-pointer' onClick={() => { copyText(item.username) }}>\n                                                <lord-icon\n                                                    style={{ \"width\": \"25px\", \"height\": \"25px\", \"paddingTop\": \"3px\", \"paddingLeft\": \"3px\" }}\n                                                    src=\"https://cdn.lordicon.com/iykgtsbt.json\"\n                                                    trigger=\"hover\" >\n                                                </lord-icon>\n                                            </div>\n                                        </div>\n                                    </td>\n                                    <td className='py-2 border border-white text-center'>\n                                        <div className='flex items-center justify-center '>\n                                            <span>{\"*\".repeat(item.password.length)}</span>\n                                            <div className='lordiconcopy size-7 cursor-pointer' onClick={() => { copyText(item.password) }}>\n                                                <lord-icon\n                                                    style={{ \"width\": \"25px\", \"height\": \"25px\", \"paddingTop\": \"3px\", \"paddingLeft\": \"3px\" }}\n                                                    src=\"https://cdn.lordicon.com/iykgtsbt.json\"\n                                                    trigger=\"hover\" >\n                                                </lord-icon>\n                                            </div>\n                                        </div>\n                                    </td>\n                                    <td className='justify-center py-2 border border-white text-center'>\n                                        <span className='cursor-pointer mx-1' onClick={() => { editPassword(item.id) }}>\n                                            <lord-icon\n                                                src=\"https://cdn.lordicon.com/gwlusjdu.json\"\n                                                trigger=\"hover\"\n                                                style={{ \"width\": \"25px\", \"height\": \"25px\" }}>\n                                            </lord-icon>\n                                        </span>\n                                        <span className='cursor-pointer mx-1' onClick={() => { deletePassword(item.id) }}>\n                                            <lord-icon\n                                                src=\"https://cdn.lordicon.com/skkahier.json\"\n                                                trigger=\"hover\"\n                                                style={{ \"width\": \"25px\", \"height\": \"25px\" }}>\n                                            </lord-icon>\n                                        </span>\n                                    </td>\n                                </tr>\n                            })}\n                        </tbody>\n                    </table>}\n                </div>\n            </div>\n\n        </>\n    )\n}\n\nexport default Manager\n"
  },
  {
    "path": "Video 130/passop-mongo/src/components/Navbar.jsx",
    "content": "import React from 'react'\n\nconst Navbar = () => {\n    return (\n        <nav className='bg-slate-800 text-white '>\n            <div className=\"mycontainer flex justify-between items-center px-4 py-5 h-14\">\n\n                <div className=\"logo font-bold text-white text-2xl\">\n                    <span className='text-green-500'> &lt;</span>\n                    <span>Pass</span><span className='text-green-500'>OP/&gt;</span>\n                </div>\n                {/* <ul>\n                    <li className='flex gap-4 '>\n                        <a className='hover:font-bold' href='/'>Home</a>\n                        <a className='hover:font-bold' href='#'>About</a>\n                        <a className='hover:font-bold' href='#'>Contact</a>\n                    </li>\n                </ul> */}\n                <button className='text-white bg-green-700 my-5 mx-2 rounded-full flex  justify-between items-center ring-white ring-1'>\n                    <img className='invert  w-10 p-1' src=\"/icons/github.svg\" alt=\"github logo\" />\n                    <span className='font-bold px-2'>GitHub</span>\n\n                </button>\n            </div>\n        </nav>\n    )\n}\n\nexport default Navbar\n"
  },
  {
    "path": "Video 130/passop-mongo/src/index.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n \n\n@layer components {\n  .mycontainer {\n    @apply container px-40 py-16 mx-auto ;\n  }\n}"
  },
  {
    "path": "Video 130/passop-mongo/src/main.jsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App.jsx'\nimport './index.css'\n\nReactDOM.createRoot(document.getElementById('root')).render(\n  <React.StrictMode>\n    <App />\n  </React.StrictMode>,\n)\n"
  },
  {
    "path": "Video 130/passop-mongo/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nexport default {\n  content: [\n    \"./index.html\",\n    \"./src/**/*.{js,ts,jsx,tsx}\",\n  ],\n  theme: {\n    extend: {},\n  },\n  plugins: [],\n}"
  },
  {
    "path": "Video 130/passop-mongo/vite.config.js",
    "content": "import { defineConfig } from 'vite'\nimport react from '@vitejs/plugin-react'\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n  plugins: [react()],\n})\n"
  },
  {
    "path": "Video 131/.eslintrc.json",
    "content": "{\n  \"extends\": \"next/core-web-vitals\"\n}\n"
  },
  {
    "path": "Video 131/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n.yarn/install-state.gz\n\n# testing\n/coverage\n\n# next.js\n/.next/\n/out/\n\n# production\n/build\n\n# misc\n.DS_Store\n*.pem\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# local env files\n.env*.local\n\n# vercel\n.vercel\n\n# typescript\n*.tsbuildinfo\nnext-env.d.ts\n"
  },
  {
    "path": "Video 131/README.md",
    "content": "This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).\n\n## Getting Started\n\nFirst, run the development server:\n\n```bash\nnpm run dev\n# or\nyarn dev\n# or\npnpm dev\n# or\nbun dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) with your browser to see the result.\n\nYou can start editing the page by modifying `app/page.js`. The page auto-updates as you edit the file.\n\nThis project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.\n\n## Learn More\n\nTo learn more about Next.js, take a look at the following resources:\n\n- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.\n- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.\n\nYou can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!\n\n## Deploy on Vercel\n\nThe easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.\n\nCheck out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.\n"
  },
  {
    "path": "Video 131/actions/useractions.js",
    "content": "\"use server\"\n\nimport Razorpay from \"razorpay\"\nimport Payment from \"@/models/Payment\"\nimport connectDb from \"@/db/connectDb\"\nimport User from \"@/models/User\"\n\n\nexport const initiate = async (amount, to_username, paymentform) => {\n    await connectDb()\n    // fetch the secret of the user who is getting the payment \n    let user = await User.findOne({username: to_username})\n    const secret = user.razorpaysecret\n\n    var instance = new Razorpay({ key_id: user.razorpayid, key_secret: secret })\n\n\n\n    let options = {\n        amount: Number.parseInt(amount),\n        currency: \"INR\",\n    }\n\n    let x = await instance.orders.create(options)\n\n    // create a payment object which shows a pending payment in the database\n    await Payment.create({ oid: x.id, amount: amount/100, to_user: to_username, name: paymentform.name, message: paymentform.message })\n\n    return x\n\n}\n\n\nexport const fetchuser = async (username) => {\n    await connectDb()\n    let u = await User.findOne({ username: username })\n    let user = u.toObject({ flattenObjectIds: true })\n    return user\n}\n\nexport const fetchpayments = async (username) => {\n    await connectDb()\n    // find all payments sorted by decreasing order of amount and flatten object ids\n    let p = await Payment.find({ to_user: username, done:true }).sort({ amount: -1 }).limit(10).lean()\n    return p\n}\n\nexport const updateProfile = async (data, oldusername) => {\n    await connectDb()\n    let ndata = Object.fromEntries(data)\n\n    // If the username is being updated, check if username is available\n    if (oldusername !== ndata.username) {\n        let u = await User.findOne({ username: ndata.username })\n        if (u) {\n            return { error: \"Username already exists\" }\n        }   \n        await User.updateOne({email: ndata.email}, ndata)\n        // Now update all the usernames in the Payments table \n        await Payment.updateMany({to_user: oldusername}, {to_user: ndata.username})\n        \n    }\n    else{\n\n        \n        await User.updateOne({email: ndata.email}, ndata)\n    }\n\n\n}\n\n\n"
  },
  {
    "path": "Video 131/app/[username]/page.js",
    "content": "import React from 'react'\nimport PaymentPage from '@/components/PaymentPage'\nimport { notFound } from \"next/navigation\"\nimport connectDb from '@/db/connectDb'\nimport User from '@/models/User'\nconst Username = async ({ params }) => {\n\n  // If the username is not present in the database, show a 404 page\n  const checkUser = async () => {\n    await connectDb()\n    let u = await User.findOne({ username: params.username })\n    if (!u) {\n      return notFound()\n    }\n  }\n  await checkUser()\n\n\n\n  return (\n    <>\n      <PaymentPage username={params.username} />\n    </>\n  )\n}\n\nexport default Username\n \nexport async function generateMetadata({ params }) {\n  return {\n    title: `Support ${params.username} - Get Me A Chai`,\n  }\n}\n"
  },
  {
    "path": "Video 131/app/about/page.js",
    "content": "import React from 'react';\n\nconst About = () => {\n    return (\n        <div className=\"container mx-auto px-8 md:px-4 py-8\">\n            <h1 className=\"text-3xl font-semibold mb-4\">About Get Me a Chai</h1>\n            <p className=\"text-lg mb-6\">\n                Get Me a Chai is a crowdfunding platform designed for creators to fund their projects with the support of their fans. It&apos;s a space where your fans can directly contribute to your creative endeavors by buying you a chai. Unlock the potential of your fanbase and bring your projects to life.\n            </p>\n\n            <h2 className=\"text-2xl font-semibold mb-4\">How It Works</h2>\n            <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-8\">\n                <div className=\"flex items-center mb-6\">\n                    <img className=\"w-20 h-20 rounded-full mr-4\" src=\"/group.gif\" alt=\"Fans Want to Collaborate\" />\n                    <div>\n                        <h3 className=\"text-xl font-semibold mb-2\">Fans Want to Collaborate</h3>\n                        <p>Your fans are enthusiastic about collaborating with you on your projects.</p>\n                    </div>\n                </div>\n                <div className=\"flex items-center mb-6\">\n                    <img className=\"w-20 h-20 rounded-full mr-4\" src=\"/coin.gif\" alt=\"Support Through Chai\" />\n                    <div>\n                        <h3 className=\"text-xl font-semibold mb-2\">Support Through Chai</h3>\n                        <p>Receive support from your fans in the form of chai purchases, directly contributing to your project funding.</p>\n                    </div>\n                </div>\n                {/* Add more steps as needed */}\n            </div>\n\n            <h2 className=\"text-2xl font-semibold mb-4\">Benefits for Creators</h2>\n            <ul className=\"list-disc pl-6 mb-6\">\n                <li className=\"mb-2\">Direct financial support from your fanbase</li>\n                <li className=\"mb-2\">Engage with your fans on a more personal level</li>\n                <li className=\"mb-2\">Access to a platform tailored for creative projects</li>\n                {/* Add more benefits */}\n            </ul>\n\n            <h2 className=\"text-2xl font-semibold mb-4\">Benefits for Fans</h2>\n            <ul className=\"list-disc pl-6 mb-6\">\n                <li className=\"mb-2\">Directly contribute to the success of your favorite creators</li>\n                <li className=\"mb-2\">Exclusive rewards and perks for supporting creators</li>\n                <li className=\"mb-2\">Be part of the creative process and connect with creators</li>\n                {/* Add more benefits */}\n            </ul>\n\n            {/* Additional sections */}\n            <h2 className=\"text-2xl font-semibold mb-4\">Benefits of Collaboration</h2>\n            <ul className=\"list-disc pl-6 mb-6\">\n                <li className=\"mb-2\">Unlock new opportunities through collaboration with fellow creators</li>\n                <li className=\"mb-2\">Expand your network and reach a wider audience</li>\n                <li className=\"mb-2\">Combine skills and resources to create innovative projects</li>\n                {/* Add more benefits */}\n            </ul>\n\n            <h2 className=\"text-2xl font-semibold mb-4\">Community Engagement</h2>\n            <ul className=\"list-disc pl-6 mb-6\">\n                <li className=\"mb-2\">Interact with a supportive community of like-minded individuals</li>\n                <li className=\"mb-2\">Receive valuable feedback and encouragement from peers</li>\n                <li className=\"mb-2\">Participate in discussions and events centered around your interests</li>\n                {/* Add more benefits */}\n            </ul>\n\n            <h2 className=\"text-2xl font-semibold mb-4\">Access to Resources</h2>\n            <ul className=\"list-disc pl-6 mb-6\">\n                <li className=\"mb-2\">Gain access to resources such as tutorials, templates, and tools</li>\n                <li className=\"mb-2\">Receive guidance and mentorship from experienced creators</li>\n                <li className=\"mb-2\">Stay updated on industry trends and best practices</li>\n                {/* Add more benefits */}\n            </ul>\n\n            <h2 className=\"text-2xl font-semibold mb-4\">Recognition and Exposure</h2>\n            <ul className=\"list-disc pl-6 mb-6\">\n                <li className=\"mb-2\">Showcase your work to a global audience and gain recognition</li>\n                <li className=\"mb-2\">Feature in promotional materials and campaigns</li>\n                <li className=\"mb-2\">Build your portfolio and increase your credibility as a creator</li>\n                {/* Add more benefits */}\n            </ul>\n\n            <h2 className=\"text-2xl font-semibold mb-4\">Supportive Community</h2>\n            <ul className=\"list-disc pl-6 mb-6\">\n                <li className=\"mb-2\">Join a community that values creativity, diversity, and inclusivity</li>\n                <li className=\"mb-2\">Find encouragement and inspiration from fellow members</li>\n                <li className=\"mb-2\">Collaborate on projects and share resources for mutual growth</li>\n                {/* Add more benefits */}\n            </ul>\n\n        </div>\n    );\n}\n\nexport default About;\n\nexport const metadata = {\n    title: \"About - Get Me A Chai\",\n  }\n   "
  },
  {
    "path": "Video 131/app/api/auth/[...nextauth]/route.js",
    "content": "import NextAuth from 'next-auth'\n// import AppleProvider from 'next-auth/providers/apple'\n// import FacebookProvider from 'next-auth/providers/facebook'\n// import GoogleProvider from 'next-auth/providers/google'\n// import EmailProvider from 'next-auth/providers/email'\nimport GitHubProvider from \"next-auth/providers/github\";\nimport mongoose from \"mongoose\";\nimport connectDb from '@/db/connectDb';\nimport User from '@/models/User';\nimport Payment from '@/models/Payment';\n \n\nexport const authoptions =  NextAuth({\n    providers: [\n      // OAuth authentication providers...\n      GitHubProvider({\n        clientId: process.env.GITHUB_ID,\n        clientSecret: process.env.GITHUB_SECRET\n      }),\n    //   AppleProvider({\n    //     clientId: process.env.APPLE_ID,\n    //     clientSecret: process.env.APPLE_SECRET\n    //   }),\n    //   FacebookProvider({\n    //     clientId: process.env.FACEBOOK_ID,\n    //     clientSecret: process.env.FACEBOOK_SECRET\n    //   }),\n    //   GoogleProvider({\n    //     clientId: process.env.GOOGLE_ID,\n    //     clientSecret: process.env.GOOGLE_SECRET\n    //   }),\n    //   // Passwordless / email sign in\n    //   EmailProvider({\n    //     server: process.env.MAIL_SERVER,\n    //     from: 'NextAuth.js <no-reply@example.com>'\n    //   }),\n    ],\n    callbacks: {\n      async signIn({ user, account, profile, email, credentials }) {\n         if(account.provider == \"github\") { \n          await connectDb()\n          // Check if the user already exists in the database\n          const currentUser =  await User.findOne({email: email}) \n          if(!currentUser){\n            // Create a new user\n             const newUser = await User.create({\n              email: user.email, \n              username: user.email.split(\"@\")[0], \n            })   \n          } \n          return true\n         }\n      },\n      \n      async session({ session, user, token }) {\n        const dbUser = await User.findOne({email: session.user.email})\n        session.user.name = dbUser.username\n        return session\n      },\n    } \n  })\n\n  export { authoptions as GET, authoptions as POST}"
  },
  {
    "path": "Video 131/app/api/razorpay/route.js",
    "content": "import { NextResponse } from \"next/server\";\nimport { validatePaymentVerification } from \"razorpay/dist/utils/razorpay-utils\";\nimport Payment from \"@/models/Payment\";\nimport Razorpay from \"razorpay\";\nimport connectDb from \"@/db/connectDb\";\nimport User from \"@/models/User\";\n\nexport const POST = async (req) => {\n    await connectDb()\n    let body = await req.formData()\n    body = Object.fromEntries(body)\n\n    // Check if razorpayOrderId is present on the server\n    let p = await Payment.findOne({oid: body.razorpay_order_id})\n    if(!p){\n        return NextResponse.json({success: false, message:\"Order Id not found\"})\n    }\n\n    // fetch the secret of the user who is getting the payment \n    let user = await User.findOne({username: p.to_user})\n    const secret = user.razorpaysecret\n\n    // Verify the payment\n    let xx = validatePaymentVerification({\"order_id\": body.razorpay_order_id, \"payment_id\": body.razorpay_payment_id}, body.razorpay_signature, secret)\n\n    if(xx){\n        // Update the payment status\n        const updatedPayment = await Payment.findOneAndUpdate({oid: body.razorpay_order_id}, {done: \"true\"}, {new: true})\n        return NextResponse.redirect(`${process.env.NEXT_PUBLIC_URL}/${updatedPayment.to_user}?paymentdone=true`)  \n    }\n\n    else{\n        return NextResponse.json({success: false, message:\"Payment Verification Failed\"})\n    }\n\n}"
  },
  {
    "path": "Video 131/app/dashboard/page.js",
    "content": "\nimport Dashboard from '@/components/Dashboard'\n\nconst DashboardPage = () => {\n    return (\n        <Dashboard/>\n    )\n}\n\nexport default DashboardPage\n\nexport const metadata = {\n    title: \"Dashboard - Get Me A Chai\",\n  }\n   "
  },
  {
    "path": "Video 131/app/globals.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n.invertImg{\n    filter: invert(0.23)\n}"
  },
  {
    "path": "Video 131/app/layout.js",
    "content": "import { Inter } from \"next/font/google\";\nimport \"./globals.css\";\nimport Navbar from \"@/components/Navbar\";\nimport Footer from \"@/components/Footer\";\nimport SessionWrapper from \"@/components/SessionWrapper\";\n\nconst inter = Inter({ subsets: [\"latin\"] });\n\nexport const metadata = {\n  title: \"Get me A Chai - Fund your projects with chai\",\n  description: \"This website is a crowdfunding platform for creators.\",\n};\n\nexport default function RootLayout({ children }) {\n  return (\n    <html lang=\"en\">\n      <body className=\"bg-[#000000] bg-[radial-gradient(#ffffff33_1px,#00091d_1px)] bg-[size:20px_20px] text-white\">\n        <SessionWrapper> \n          <Navbar />\n          <div className=\" min-h-screen bg-[#000000] bg-[radial-gradient(#ffffff33_1px,#00091d_1px)] bg-[size:20px_20px] text-white\">\n            {children}\n          </div>\n          <Footer />\n        </SessionWrapper>\n      </body>\n    </html>\n  );\n}\n"
  },
  {
    "path": "Video 131/app/login/page.js",
    "content": "\"use client\"\nimport React, {useEffect} from 'react'\nimport { useSession, signIn, signOut } from \"next-auth/react\"\nimport { useRouter } from 'next/navigation'\n\nconst Login = () => {\n  const { data: session } = useSession()\n  const router = useRouter()\n\n  useEffect(() => {\n    document.title = \"Login - Get Me A Chai\" \n    console.log(session)\n    if (session) {\n      router.push('/dashboard')\n    }\n  }, [])\n\n  return (\n    <div className='text-white py-14 container mx-auto'>\n      <h1 className='text-center font-bold text-3xl'>Login to Get Started</h1>\n\n      <div className=\"flex flex-col gap-2 min-h-screen items-center  p-10\">\n\n\n        <button\n          className=\"flex items-center w-64 bg-slate-50 text-black border border-gray-300 rounded-lg shadow-md max-w-xs px-6 py-2 text-sm font-medium  hover:bg-gray-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-500\">\n          <svg className=\"h-6 w-6 mr-2\" xmlns=\"http://www.w3.org/2000/svg\" xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            viewBox=\"-0.5 0 48 48\" version=\"1.1\">\n\n            <g id=\"Icons\" stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\">\n              <g id=\"Color-\" transform=\"translate(-401.000000, -860.000000)\">\n                <g id=\"Google\" transform=\"translate(401.000000, 860.000000)\">\n                  <path\n                    d=\"M9.82727273,24 C9.82727273,22.4757333 10.0804318,21.0144 10.5322727,19.6437333 L2.62345455,13.6042667 C1.08206818,16.7338667 0.213636364,20.2602667 0.213636364,24 C0.213636364,27.7365333 1.081,31.2608 2.62025,34.3882667 L10.5247955,28.3370667 C10.0772273,26.9728 9.82727273,25.5168 9.82727273,24\"\n                    id=\"Fill-1\" fill=\"#FBBC05\"> </path>\n                  <path\n                    d=\"M23.7136364,10.1333333 C27.025,10.1333333 30.0159091,11.3066667 32.3659091,13.2266667 L39.2022727,6.4 C35.0363636,2.77333333 29.6954545,0.533333333 23.7136364,0.533333333 C14.4268636,0.533333333 6.44540909,5.84426667 2.62345455,13.6042667 L10.5322727,19.6437333 C12.3545909,14.112 17.5491591,10.1333333 23.7136364,10.1333333\"\n                    id=\"Fill-2\" fill=\"#EB4335\"> </path>\n                  <path\n                    d=\"M23.7136364,37.8666667 C17.5491591,37.8666667 12.3545909,33.888 10.5322727,28.3562667 L2.62345455,34.3946667 C6.44540909,42.1557333 14.4268636,47.4666667 23.7136364,47.4666667 C29.4455,47.4666667 34.9177955,45.4314667 39.0249545,41.6181333 L31.5177727,35.8144 C29.3995682,37.1488 26.7323182,37.8666667 23.7136364,37.8666667\"\n                    id=\"Fill-3\" fill=\"#34A853\"> </path>\n                  <path\n                    d=\"M46.1454545,24 C46.1454545,22.6133333 45.9318182,21.12 45.6113636,19.7333333 L23.7136364,19.7333333 L23.7136364,28.8 L36.3181818,28.8 C35.6879545,31.8912 33.9724545,34.2677333 31.5177727,35.8144 L39.0249545,41.6181333 C43.3393409,37.6138667 46.1454545,31.6490667 46.1454545,24\"\n                    id=\"Fill-4\" fill=\"#4285F4\"> </path>\n                </g>\n              </g>\n            </g>\n          </svg>\n          <span>Continue with Google</span>\n        </button>\n\n\n        <button\n          className=\"flex items-center w-64 bg-slate-50 text-black border border-gray-300 rounded-lg shadow-md max-w-xs px-6 py-2 text-sm font-medium  hover:bg-gray-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-500\">\n          <svg className=\"h-6 w-6 mr-2\" xmlns=\"http://www.w3.org/2000/svg\" xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            viewBox=\"0 -2 44 44\" version=\"1.1\">\n            <g id=\"Icons\" stroke=\"none\" width=\"1\" fill=\"none\" fillRule=\"evenodd\">\n              <g id=\"Color-\" transform=\"translate(-702.000000, -265.000000)\" fill=\"#007EBB\">\n                <path\n                  d=\"M746,305 L736.2754,305 L736.2754,290.9384 C736.2754,287.257796 734.754233,284.74515 731.409219,284.74515 C728.850659,284.74515 727.427799,286.440738 726.765522,288.074854 C726.517168,288.661395 726.555974,289.478453 726.555974,290.295511 L726.555974,305 L716.921919,305 C716.921919,305 717.046096,280.091247 716.921919,277.827047 L726.555974,277.827047 L726.555974,282.091631 C727.125118,280.226996 730.203669,277.565794 735.116416,277.565794 C741.21143,277.565794 746,281.474355 746,289.890824 L746,305 L746,305 Z M707.17921,274.428187 L707.117121,274.428187 C704.0127,274.428187 702,272.350964 702,269.717936 C702,267.033681 704.072201,265 707.238711,265 C710.402634,265 712.348071,267.028559 712.41016,269.710252 C712.41016,272.34328 710.402634,274.428187 707.17921,274.428187 L707.17921,274.428187 L707.17921,274.428187 Z M703.109831,277.827047 L711.685795,277.827047 L711.685795,305 L703.109831,305 L703.109831,277.827047 L703.109831,277.827047 Z\"\n                  id=\"LinkedIn\">\n\n                </path>\n              </g>\n            </g>\n          </svg> <span>Continue with LinkedIn</span>\n        </button>\n\n\n        <button\n          className=\"flex items-center w-64 bg-slate-50 text-black border border-gray-300 rounded-lg shadow-md max-w-xs px-6 py-2 text-sm font-medium  hover:bg-gray-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-500\">\n          <svg className=\"h-6 w-6 mr-2\" xmlns=\"http://www.w3.org/2000/svg\" xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            viewBox=\"0 -4 48 48\" version=\"1.1\">\n            <g id=\"Icons\" stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\">\n              <g id=\"Color-\" transform=\"translate(-300.000000, -164.000000)\" fill=\"#00AAEC\">\n                <path\n                  d=\"M348,168.735283 C346.236309,169.538462 344.337383,170.081618 342.345483,170.324305 C344.379644,169.076201 345.940482,167.097147 346.675823,164.739617 C344.771263,165.895269 342.666667,166.736006 340.418384,167.18671 C338.626519,165.224991 336.065504,164 333.231203,164 C327.796443,164 323.387216,168.521488 323.387216,174.097508 C323.387216,174.88913 323.471738,175.657638 323.640782,176.397255 C315.456242,175.975442 308.201444,171.959552 303.341433,165.843265 C302.493397,167.339834 302.008804,169.076201 302.008804,170.925244 C302.008804,174.426869 303.747139,177.518238 306.389857,179.329722 C304.778306,179.280607 303.256911,178.821235 301.9271,178.070061 L301.9271,178.194294 C301.9271,183.08848 305.322064,187.17082 309.8299,188.095341 C309.004402,188.33225 308.133826,188.450704 307.235077,188.450704 C306.601162,188.450704 305.981335,188.390033 305.381229,188.271578 C306.634971,192.28169 310.269414,195.2026 314.580032,195.280607 C311.210424,197.99061 306.961789,199.605634 302.349709,199.605634 C301.555203,199.605634 300.769149,199.559408 300,199.466956 C304.358514,202.327194 309.53689,204 315.095615,204 C333.211481,204 343.114633,188.615385 343.114633,175.270495 C343.114633,174.831347 343.106181,174.392199 343.089276,173.961719 C345.013559,172.537378 346.684275,170.760563 348,168.735283\"\n                  id=\"Twitter\">\n\n                </path>\n              </g>\n            </g>\n          </svg>\n\n          <span>Continue with Twitter</span>\n        </button>\n\n\n        <button\n          className=\"flex items-center w-64 bg-slate-50 text-black border border-gray-300 rounded-lg shadow-md max-w-xs px-6 py-2 text-sm font-medium  hover:bg-gray-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-500\">\n          <svg className=\"h-6 w-6 mr-2\" xmlns=\"http://www.w3.org/2000/svg\" xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            viewBox=\"0 0 48 48\" version=\"1.1\">\n            <g id=\"Icons\" stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\">\n              <g id=\"Color-\" transform=\"translate(-200.000000, -160.000000)\" fill=\"#4460A0\">\n                <path\n                  d=\"M225.638355,208 L202.649232,208 C201.185673,208 200,206.813592 200,205.350603 L200,162.649211 C200,161.18585 201.185859,160 202.649232,160 L245.350955,160 C246.813955,160 248,161.18585 248,162.649211 L248,205.350603 C248,206.813778 246.813769,208 245.350955,208 L233.119305,208 L233.119305,189.411755 L239.358521,189.411755 L240.292755,182.167586 L233.119305,182.167586 L233.119305,177.542641 C233.119305,175.445287 233.701712,174.01601 236.70929,174.01601 L240.545311,174.014333 L240.545311,167.535091 C239.881886,167.446808 237.604784,167.24957 234.955552,167.24957 C229.424834,167.24957 225.638355,170.625526 225.638355,176.825209 L225.638355,182.167586 L219.383122,182.167586 L219.383122,189.411755 L225.638355,189.411755 L225.638355,208 L225.638355,208 Z\"\n                  id=\"Facebook\">\n\n                </path>\n              </g>\n            </g>\n          </svg>\n\n          <span>Continue with Facebook</span>\n        </button>\n\n\n        <button onClick={() => { signIn(\"github\") }}\n          className=\"flex items-center w-64 bg-slate-50 text-black border border-gray-300 rounded-lg shadow-md max-w-xs px-6 py-2 text-sm font-medium  hover:bg-gray-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-500\">\n          <svg className=\"h-6 w-6 mr-2\" xmlns=\"http://www.w3.org/2000/svg\" xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            viewBox=\"0 0 73 73\" version=\"1.1\">\n            <g id=\"team-collaboration/version-control/github\" stroke=\"none\" strokeWidth=\"1\" fill=\"none\"\n              fillRule=\"evenodd\">\n              <g id=\"container\" transform=\"translate(2.000000, 2.000000)\" fillRule=\"nonzero\">\n                <rect id=\"mask\" stroke=\"#000000\" strokeWidth=\"2\" fill=\"#000000\" x=\"-1\"\n                  y=\"-1\" width=\"71\" height=\"71\" rx=\"14\">\n\n                </rect>\n                <path\n                  d=\"M58.3067362,21.4281798 C55.895743,17.2972267 52.6253846,14.0267453 48.4948004,11.615998 C44.3636013,9.20512774 39.8535636,8 34.9614901,8 C30.0700314,8 25.5585181,9.20549662 21.4281798,11.615998 C17.2972267,14.0266224 14.0269912,17.2972267 11.615998,21.4281798 C9.20537366,25.5590099 8,30.0699084 8,34.9607523 C8,40.8357654 9.71405782,46.1187277 13.1430342,50.8109917 C16.5716416,55.5036246 21.0008949,58.7507436 26.4304251,60.5527176 C27.0624378,60.6700211 27.5302994,60.5875152 27.8345016,60.3072901 C28.1388268,60.0266961 28.290805,59.6752774 28.290805,59.2545094 C28.290805,59.1842994 28.2847799,58.5526556 28.2730988,57.3588401 C28.2610487,56.1650247 28.2553926,55.1235563 28.2553926,54.2349267 L27.4479164,54.3746089 C26.9330843,54.468919 26.2836113,54.5088809 25.4994975,54.4975686 C24.7157525,54.4866252 23.9021284,54.4044881 23.0597317,54.2517722 C22.2169661,54.1004088 21.4330982,53.749359 20.7075131,53.1993604 C19.982297,52.6493618 19.4674649,51.9294329 19.1631397,51.0406804 L18.8120898,50.2328353 C18.5780976,49.6950097 18.2097104,49.0975487 17.7064365,48.4426655 C17.2031625,47.7871675 16.6942324,47.3427912 16.1794003,47.108799 L15.9336039,46.9328437 C15.7698216,46.815909 15.6178435,46.6748743 15.4773006,46.511215 C15.3368806,46.3475556 15.2317501,46.1837734 15.1615401,46.0197452 C15.0912072,45.855594 15.1494901,45.7209532 15.3370036,45.6153308 C15.5245171,45.5097084 15.8633939,45.4584343 16.3551097,45.4584343 L17.0569635,45.5633189 C17.5250709,45.6571371 18.104088,45.9373622 18.7947525,46.4057156 C19.4850481,46.8737001 20.052507,47.4821045 20.4972521,48.230683 C21.0358155,49.1905062 21.6846737,49.9218703 22.4456711,50.4251443 C23.2060537,50.9284182 23.9727072,51.1796248 24.744894,51.1796248 C25.5170807,51.1796248 26.1840139,51.121096 26.7459396,51.0046532 C27.3072505,50.8875956 27.8338868,50.7116403 28.3256025,50.477771 C28.5362325,48.9090515 29.1097164,47.7039238 30.0455624,46.8615271 C28.7116959,46.721353 27.5124702,46.5102313 26.4472706,46.2295144 C25.3826858,45.9484285 24.2825656,45.4922482 23.1476478,44.8597436 C22.0121153,44.2280998 21.0701212,43.44374 20.3214198,42.5080169 C19.5725954,41.571802 18.9580429,40.3426971 18.4786232,38.821809 C17.9989575,37.300306 17.7590632,35.5451796 17.7590632,33.5559381 C17.7590632,30.7235621 18.6837199,28.3133066 20.5326645,26.3238191 C19.6665366,24.1944035 19.7483048,21.8072644 20.778215,19.1626478 C21.4569523,18.951772 22.4635002,19.1100211 23.7973667,19.6364115 C25.1314792,20.1630477 26.1082708,20.6141868 26.7287253,20.9882301 C27.3491798,21.3621504 27.8463057,21.6790175 28.2208409,21.9360032 C30.3978419,21.3277217 32.644438,21.0235195 34.9612442,21.0235195 C37.2780503,21.0235195 39.5251383,21.3277217 41.7022622,21.9360032 L43.0362517,21.0938524 C43.9484895,20.5319267 45.0257392,20.0169716 46.2654186,19.5488642 C47.5058357,19.0810026 48.4543466,18.9521409 49.1099676,19.1630167 C50.1627483,21.8077563 50.2565666,24.1947724 49.3901927,26.324188 C51.2390143,28.3136755 52.1640399,30.7245457 52.1640399,33.556307 C52.1640399,35.5455485 51.9232849,37.3062081 51.444357,38.8393922 C50.9648143,40.3728223 50.3449746,41.6006975 49.5845919,42.5256002 C48.8233486,43.4503799 47.8753296,44.2285916 46.7404118,44.8601125 C45.6052481,45.4921252 44.504759,45.9483056 43.4401742,46.2293914 C42.3750975,46.5104772 41.1758719,46.7217219 39.8420054,46.8621419 C41.0585683,47.9149226 41.6669728,49.5767225 41.6669728,51.846804 L41.6669728,59.2535257 C41.6669728,59.6742937 41.8132948,60.0255895 42.1061847,60.3063064 C42.3987058,60.5865315 42.8606653,60.6690374 43.492678,60.5516109 C48.922946,58.7498829 53.3521992,55.5026409 56.7806837,50.810008 C60.2087994,46.117744 61.923472,40.8347817 61.923472,34.9597686 C61.9222424,30.0695396 60.7162539,25.5590099 58.3067362,21.4281798 Z\"\n                  id=\"Shape\" fill=\"#FFFFFF\">\n\n                </path>\n              </g>\n            </g>\n          </svg>\n\n          <span>Continue with Github</span>\n        </button>\n\n\n        <button\n          className=\"flex items-center w-64 bg-slate-50 text-black border border-gray-300 rounded-lg shadow-md max-w-xs px-6 py-2 text-sm font-medium  hover:bg-gray-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-500\">\n          <svg className=\"h-6 w-6 mr-2\" xmlns=\"http://www.w3.org/2000/svg\" xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            viewBox=\"-1.5 0 20 20\" version=\"1.1\">\n            <g id=\"Page-1\" stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\">\n              <g id=\"Dribbble-Light-Preview\" transform=\"translate(-102.000000, -7439.000000)\" fill=\"#000000\">\n                <g id=\"icons\" transform=\"translate(56.000000, 160.000000)\">\n                  <path\n                    d=\"M57.5708873,7282.19296 C58.2999598,7281.34797 58.7914012,7280.17098 58.6569121,7279 C57.6062792,7279.04 56.3352055,7279.67099 55.5818643,7280.51498 C54.905374,7281.26397 54.3148354,7282.46095 54.4735932,7283.60894 C55.6455696,7283.69593 56.8418148,7283.03894 57.5708873,7282.19296 M60.1989864,7289.62485 C60.2283111,7292.65181 62.9696641,7293.65879 63,7293.67179 C62.9777537,7293.74279 62.562152,7295.10677 61.5560117,7296.51675 C60.6853718,7297.73474 59.7823735,7298.94772 58.3596204,7298.97372 C56.9621472,7298.99872 56.5121648,7298.17973 54.9134635,7298.17973 C53.3157735,7298.17973 52.8162425,7298.94772 51.4935978,7298.99872 C50.1203933,7299.04772 49.0738052,7297.68074 48.197098,7296.46676 C46.4032359,7293.98379 45.0330649,7289.44985 46.8734421,7286.3899 C47.7875635,7284.87092 49.4206455,7283.90793 51.1942837,7283.88393 C52.5422083,7283.85893 53.8153044,7284.75292 54.6394294,7284.75292 C55.4635543,7284.75292 57.0106846,7283.67793 58.6366882,7283.83593 C59.3172232,7283.86293 61.2283842,7284.09893 62.4549652,7285.8199 C62.355868,7285.8789 60.1747177,7287.09489 60.1989864,7289.62485\"\n                    id=\"apple-[#173]\">\n\n                  </path>\n                </g>\n              </g>\n            </g>\n          </svg>\n\n          <span>Continue with Apple</span>\n        </button>\n\n\n      </div>\n    </div>\n  )\n}\n\nexport default Login\n "
  },
  {
    "path": "Video 131/app/page.js",
    "content": "import Image from \"next/image\";\nimport Link from \"next/link\";\n\nexport default function Home() {\n  return (\n    <>\n      <div className=\"flex justify-center flex-col gap-4 items-center text-white h-[44vh] px-5 md:px-0 text-xs md:text-base  \">\n        <div className=\"font-bold flex gap-6 md:gap-20 md:text-5xl justify-center items-center text-3xl\">Get Me a Chai <span><img className=\"invertImg\" src=\"/tea.gif\" width={88} alt=\"\" /></span></div>\n        <p className=\"text-center md:text-left\">\n          A crowdfunding platform for creators to fund their projects. \n          \n        </p>\n        <p className=\"text-center md:text-left\">\n\n          A place where your fans can buy you a chai. Unleash the power of your fans and get your projects funded.\n        </p>\n        <div>\n          <Link href={\"/login\"}>\n\n          <button type=\"button\" className=\"text-white bg-gradient-to-br from-purple-600 to-blue-500 hover:bg-gradient-to-bl focus:ring-4 focus:outline-none focus:ring-blue-300 dark:focus:ring-blue-800 font-medium rounded-lg text-sm px-5 py-2.5 text-center me-2 mb-2\">Start Here</button>\n          </Link>\n\n          <Link href=\"/about\">\n          <button type=\"button\" className=\"text-white bg-gradient-to-br from-purple-600 to-blue-500 hover:bg-gradient-to-bl focus:ring-4 focus:outline-none focus:ring-blue-300 dark:focus:ring-blue-800 font-medium rounded-lg text-sm px-5 py-2.5 text-center me-2 mb-2\">Read More</button>\n          </Link>\n\n        </div>\n      </div>\n      <div className=\"bg-white h-1 opacity-10\">\n      </div>\n\n      <div className=\"text-white container mx-auto pb-32 pt-14 px-10\">\n  <h2 className=\"text-3xl font-bold text-center mb-14\">Your Fans can buy you a Chai</h2>\n  <div className=\"flex gap-5 justify-around\">\n    <div className=\"item space-y-3 flex flex-col items-center justify-center\">\n      <img className=\"bg-slate-400 rounded-full p-2 text-black\" width={88} src=\"/man.gif\" alt=\"\" />\n      <p className=\"font-bold text-center\">Fans want to help</p>\n      <p className=\"text-center\">Your fans are available to support you</p>\n    </div>\n    <div className=\"item space-y-3 flex flex-col items-center justify-center\">\n      <img className=\"bg-slate-400 rounded-full p-2 text-black\" width={88} src=\"/coin.gif\" alt=\"\" />\n      <p className=\"font-bold text-center\">Fans want to contribute</p>\n      <p className=\"text-center\">Your fans are willing to contribute financially</p>\n    </div>\n    <div className=\"item space-y-3 flex flex-col items-center justify-center\">\n      <img className=\"bg-slate-400 rounded-full p-2 text-black\" width={88} src=\"/group.gif\" alt=\"\" />\n      <p className=\"font-bold text-center\">Fans want to collaborate</p>\n      <p className=\"text-center\">Your fans are ready to collaborate with you</p>\n    </div>\n  </div>\n</div>\n      <div className=\"bg-white h-1 opacity-10\">\n      </div>\n\n      <div className=\"text-white container mx-auto pb-32 pt-14 flex flex-col items-center justify-center\">\n        <h2 className=\"text-3xl font-bold text-center mb-14\">Learn more about us</h2>\n        {/* Responsive youtube embed  */}\n        <div className=\"w-[90%] h-[40vh] md:w-[50%] md:h-[40vh] lg:w-[50%] lg:h-[40vh] xl:w-[50%] xl:h-[40vh]\">\n          <iframe className=\"w-full h-full\" src=\"https://www.youtube.com/embed/ojuUnfqnUI0?si=wMUv4DG3ia6Wt4zn\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen></iframe>\n\n          </div>\n      \n      </div>\n    </>\n  );\n}\n"
  },
  {
    "path": "Video 131/components/Dashboard.js",
    "content": "\"use client\"\nimport React, { useEffect, useState } from 'react'\nimport { useSession, signIn, signOut } from \"next-auth/react\"\nimport { useRouter } from 'next/navigation'\nimport { fetchuser, updateProfile } from '@/actions/useractions'\nimport { ToastContainer, toast } from 'react-toastify';\nimport 'react-toastify/dist/ReactToastify.css';\nimport { Bounce } from 'react-toastify';\n\nconst Dashboard = () => {\n    const { data: session, update } = useSession()\n    const router = useRouter()\n    const [form, setform] = useState({})\n\n    useEffect(() => {\n        console.log(session)\n\n        if (!session) {\n            router.push('/login')\n        }\n        else {\n            getData()\n        }\n    }, [])\n\n    const getData = async () => {\n        let u = await fetchuser(session.user.name)\n        setform(u)\n    }\n\n    const handleChange = (e) => {\n        setform({ ...form, [e.target.name]: e.target.value })\n    }\n\n    const handleSubmit = async (e) => {\n\n        let a = await updateProfile(e, session.user.name)\n        toast('Profile Updated', {\n            position: \"top-right\",\n            autoClose: 5000,\n            hideProgressBar: false,\n            closeOnClick: true,\n            pauseOnHover: true,\n            draggable: true,\n            progress: undefined,\n            theme: \"light\",\n            transition: Bounce,\n            });\n    }\n\n\n\n\n\n    return (\n        <>\n            <ToastContainer\n                position=\"top-right\"\n                autoClose={5000}\n                hideProgressBar={false}\n                newestOnTop={false}\n                closeOnClick\n                rtl={false}\n                pauseOnFocusLoss\n                draggable\n                pauseOnHover\n                theme=\"light\"\n            />\n            {/* Same as */}\n            <ToastContainer />\n            <div className='container mx-auto py-5 px-6 '>\n                <h1 className='text-center my-5 text-3xl font-bold'>Welcome to your Dashboard</h1>\n\n                <form className=\"max-w-2xl mx-auto\" action={handleSubmit}>\n\n                    <div className='my-2'>\n                        <label htmlFor=\"name\" className=\"block mb-2 text-sm font-medium text-gray-900 dark:text-white\">Name</label>\n                        <input value={form.name ? form.name : \"\"} onChange={handleChange} type=\"text\" name='name' id=\"name\" className=\"block w-full p-2 text-gray-900 border border-gray-300 rounded-lg bg-gray-50 text-xs focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500\" />\n                    </div>\n                    {/* input for email */}\n                    <div className=\"my-2\">\n                        <label htmlFor=\"email\" className=\"block mb-2 text-sm font-medium text-gray-900 dark:text-white\">Email</label>\n                        <input value={form.email ? form.email : \"\"} onChange={handleChange} type=\"email\" name='email' id=\"email\" className=\"block w-full p-2 text-gray-900 border border-gray-300 rounded-lg bg-gray-50 text-xs focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500\" />\n                    </div>\n                    {/* input forusername */}\n                    <div className='my-2'>\n                        <label htmlFor=\"username\" className=\"block mb-2 text-sm font-medium text-gray-900 dark:text-white\">Username</label>\n                        <input value={form.username ? form.username : \"\"} onChange={handleChange} type=\"text\" name='username' id=\"username\" className=\"block w-full p-2 text-gray-900 border border-gray-300 rounded-lg bg-gray-50 text-xs focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500\" />\n                    </div>\n                    {/* input for profile picture of input type text */}\n                    <div className=\"my-2\">\n                        <label htmlFor=\"profilepic\" className=\"block mb-2 text-sm font-medium text-gray-900 dark:text-white\">Profile Picture</label>\n                        <input value={form.profilepic ? form.profilepic : \"\"} onChange={handleChange} type=\"text\" name='profilepic' id=\"profilepic\" className=\"block w-full p-2 text-gray-900 border border-gray-300 rounded-lg bg-gray-50 text-xs focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500\" />\n                    </div>\n\n                    {/* input for cover pic  */}\n                    <div className=\"my-2\">\n                        <label htmlFor=\"coverpic\" className=\"block mb-2 text-sm font-medium text-gray-900 dark:text-white\">Cover Picture</label>\n                        <input value={form.coverpic ? form.coverpic : \"\"} onChange={handleChange} type=\"text\" name='coverpic' id=\"coverpic\" className=\"block w-full p-2 text-gray-900 border border-gray-300 rounded-lg bg-gray-50 text-xs focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500\" />\n                    </div>\n                    {/* input razorpay id */}\n                    <div className=\"my-2\">\n                        <label htmlFor=\"razorpayid\" className=\"block mb-2 text-sm font-medium text-gray-900 dark:text-white\">Razorpay Id</label>\n                        <input value={form.razorpayid ? form.razorpayid : \"\"} onChange={handleChange} type=\"text\" name='razorpayid' id=\"razorpayid\" className=\"block w-full p-2 text-gray-900 border border-gray-300 rounded-lg bg-gray-50 text-xs focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500\" />\n                    </div>\n                    {/* input razorpay secret */}\n                    <div className=\"my-2\">\n                        <label htmlFor=\"razorpaysecret\" className=\"block mb-2 text-sm font-medium text-gray-900 dark:text-white\">Razorpay Secret</label>\n                        <input value={form.razorpaysecret ? form.razorpaysecret : \"\"} onChange={handleChange} type=\"text\" name='razorpaysecret' id=\"razorpaysecret\" className=\"block w-full p-2 text-gray-900 border border-gray-300 rounded-lg bg-gray-50 text-xs focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500\" />\n                    </div>\n\n                    {/* Submit Button  */}\n                    <div className=\"my-6\">\n                        <button type=\"submit\" className=\"block w-full p-2 text-white bg-blue-500 rounded-lg hover:bg-blue-600 focus:ring-blue-500 focus:ring-4 focus:outline-none   dark:focus:ring-blue-800 font-medium text-sm\">Save</button>\n                    </div>\n                </form>\n\n\n            </div>\n        </>\n    )\n}\n\nexport default Dashboard\n"
  },
  {
    "path": "Video 131/components/Footer.js",
    "content": "import React from 'react'\n\nconst Footer = () => {\n  const currentYear = new Date().getFullYear();\n\n  return (\n    <footer className='bg-gray-900 text-white flex items-center justify-center px-4 h-16'>\n        <p className='text-center'>Copyright &copy; {currentYear} Get me A Chai - All rights reserved!</p>\n    </footer>\n  )\n}\n\nexport default Footer\n"
  },
  {
    "path": "Video 131/components/Navbar.js",
    "content": "\"use client\"\nimport React, { useState } from 'react'\nimport { useSession, signIn, signOut } from \"next-auth/react\"\nimport Link from 'next/link'\n\nconst Navbar = () => {\n  const { data: session } = useSession()\n  const [showdropdown, setShowdropdown] = useState(false)\n\n\n  return (\n    <nav className='bg-gray-900 shadow-xl shadow-white text-white flex justify-between items-center px-4 md:h-16'>\n\n      <Link className=\"logo font-bold text-lg flex justify-center items-center\" href={\"/\"}>\n        <img className='invertImg' src=\"tea.gif\" width={44} alt=\"\" />\n        <span className='text-xl md:text-base my-3 md:my-0'>Get Me a Chai!</span>\n      </Link>\n\n      {/* <ul className='flex justify-between gap-4'>\n        <li>Home</li>\n        <li>About</li>\n        <li>Projects</li>\n        <li>Sign Up</li>\n        <li>Login</li>\n      </ul> */}\n\n      <div className='relative flex justify-center items-center  md:block gap-4'>\n        {session && <>\n          <button onClick={() => setShowdropdown(!showdropdown)} onBlur={() => {\n            setTimeout(() => {\n              setShowdropdown(false)\n            }, 100);\n          }} id=\"dropdownDefaultButton\" data-dropdown-toggle=\"dropdown\" className=\"text-white mx-2 bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm px-2 py-2.5 text-center inline-flex items-center dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800\" type=\"button\">Account<svg className=\"w-2.5 h-2.5 ms-3\" aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 10 6\">\n              <path stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"m1 1 4 4 4-4\" />\n            </svg>\n          </button>\n\n          <div id=\"dropdown\" className={`z-10 ${showdropdown ? \"\" : \"hidden\"} absolute left-[15px] top-12 bg-white divide-y divide-gray-100 rounded-lg shadow w-44 dark:bg-gray-700`}>\n            <ul className=\"py-2 text-sm text-gray-700 dark:text-gray-200\" aria-labelledby=\"dropdownDefaultButton\">\n              <li>\n                <Link href=\"/dashboard\" className=\"block px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white\">Dashboard</Link>\n              </li>\n              <li>\n                <Link href={`/${session.user.name}`} className=\"block px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white\">Your Page</Link>\n              </li>\n              <li>\n                <Link onClick={() => signOut()} href=\"#\" className=\"block px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white\">Sign out</Link>\n              </li>\n            </ul>\n          </div></>\n        }\n\n        {session && <button className='text-white w-fit bg-gradient-to-br from-purple-600 to-blue-500 hover:bg-gradient-to-bl focus:ring-4 focus:outline-none focus:ring-blue-300 dark:focus:ring-blue-800 font-medium rounded-lg text-sm px-5 py-2.5 text-center me-2 ' onClick={() => { signOut() }}>Logout</button>}\n        {!session && <Link href={\"/login\"}>\n          <button className='text-white bg-gradient-to-br from-purple-600 to-blue-500 hover:bg-gradient-to-bl focus:ring-4 focus:outline-none focus:ring-blue-300 dark:focus:ring-blue-800 font-medium rounded-lg text-sm px-5 py-2.5 text-center me-2 '>Login</button></Link>}\n      </div>\n    </nav>\n  )\n}\n\nexport default Navbar\n"
  },
  {
    "path": "Video 131/components/PaymentPage.js",
    "content": "\"use client\"\nimport React, { useEffect, useState } from 'react'\nimport Script from 'next/script'\nimport { useSession } from 'next-auth/react'\nimport { fetchuser, fetchpayments, initiate } from '@/actions/useractions'\nimport { useSearchParams } from 'next/navigation'\nimport { ToastContainer, toast } from 'react-toastify';\nimport 'react-toastify/dist/ReactToastify.css';\nimport { Bounce } from 'react-toastify';\nimport { useRouter } from 'next/navigation'\nimport { notFound } from \"next/navigation\"\n\nconst PaymentPage = ({ username }) => {\n    // const { data: session } = useSession()\n\n    const [paymentform, setPaymentform] = useState({name: \"\", message: \"\", amount: \"\"})\n    const [currentUser, setcurrentUser] = useState({})\n    const [payments, setPayments] = useState([])\n    const searchParams = useSearchParams()\n    const router = useRouter()\n\n    useEffect(() => {\n        getData()\n    }, [])\n\n    useEffect(() => {\n        if(searchParams.get(\"paymentdone\") == \"true\"){\n        toast('Thanks for your donation!', {\n            position: \"top-right\",\n            autoClose: 5000,\n            hideProgressBar: false,\n            closeOnClick: true,\n            pauseOnHover: true,\n            draggable: true,\n            progress: undefined,\n            theme: \"light\",\n            transition: Bounce,\n            });\n        }\n        router.push(`/${username}`)\n     \n    }, [])\n    \n\n    const handleChange = (e) => {\n        setPaymentform({ ...paymentform, [e.target.name]: e.target.value })\n    }\n\n    const getData = async () => {\n        let u = await fetchuser(username)\n        setcurrentUser(u)\n        let dbpayments = await fetchpayments(username)\n        setPayments(dbpayments) \n    }\n\n\n    const pay = async (amount) => {\n        // Get the order Id \n        let a = await initiate(amount, username, paymentform)\n        let orderId = a.id\n        var options = {\n            \"key\": currentUser.razorpayid, // Enter the Key ID generated from the Dashboard\n            \"amount\": amount, // Amount is in currency subunits. Default currency is INR. Hence, 50000 refers to 50000 paise\n            \"currency\": \"INR\",\n            \"name\": \"Get Me A Chai\", //your business name\n            \"description\": \"Test Transaction\",\n            \"image\": \"https://example.com/your_logo\",\n            \"order_id\": orderId, //This is a sample Order ID. Pass the `id` obtained in the response of Step 1\n            \"callback_url\": `${process.env.NEXT_PUBLIC_URL}/api/razorpay`,\n            \"prefill\": { //We recommend using the prefill parameter to auto-fill customer's contact information especially their phone number\n                \"name\": \"Gaurav Kumar\", //your customer's name\n                \"email\": \"gaurav.kumar@example.com\",\n                \"contact\": \"9000090000\" //Provide the customer's phone number for better conversion rates \n            },\n            \"notes\": {\n                \"address\": \"Razorpay Corporate Office\"\n            },\n            \"theme\": {\n                \"color\": \"#3399cc\"\n            }\n        }\n\n        var rzp1 = new Razorpay(options);\n        rzp1.open();\n    }\n\n    \n    return (\n        <>\n            <ToastContainer\n                position=\"top-right\"\n                autoClose={5000}\n                hideProgressBar={false}\n                newestOnTop={false}\n                closeOnClick\n                rtl={false}\n                pauseOnFocusLoss\n                draggable\n                pauseOnHover\n                theme=\"light\" />\n            {/* Same as */}\n            <ToastContainer />\n            <Script src=\"https://checkout.razorpay.com/v1/checkout.js\"></Script>\n\n\n            <div className='cover w-full bg-red-50 relative'>\n                <img className='object-cover w-full h-48 md:h-[350px] shadow-blue-700 shadow-sm' src={currentUser.coverpic} alt=\"\" />\n                <div className='absolute -bottom-20 right-[33%] md:right-[46%] border-white overflow-hidden border-2 rounded-full size-36'>\n                    <img className='rounded-full object-cover size-36' width={128} height={128} src={currentUser.profilepic} alt=\"\" />\n                </div>\n            </div>\n            <div className=\"info flex justify-center items-center my-24 mb-32 flex-col gap-2\">\n                <div className='font-bold text-lg'>\n\n                    @{username}\n                </div>\n                <div className='text-slate-400'>\n                    Lets help {username} get a chai!\n\n                </div>\n                <div className='text-slate-400'>\n                  {payments.length} Payments .   ₹{payments.reduce((a, b) => a + b.amount, 0)} raised\n                </div>\n\n                <div className=\"payment flex gap-3 w-[80%] mt-11 flex-col md:flex-row\">\n                    <div className=\"supporters w-full md:w-1/2 bg-slate-900 rounded-lg text-white px-2 md:p-10\">\n                        {/* Show list of all the supporters as a leaderboard  */}\n                        <h2 className='text-2xl font-bold my-5'> Top 10 Supporters</h2>\n                        <ul className='mx-5 text-lg'>\n                            {payments.length == 0 && <li>No payments yet</li>}\n                            {payments.map((p, i) => {\n                                return <li key={i} className='my-4 flex gap-2 items-center'>\n                                    <img width={33} src=\"avatar.gif\" alt=\"user avatar\" />\n                                    <span>\n                                        {p.name} donated <span className='font-bold'>₹{p.amount}</span> with a message &quot;{p.message}&quot;\n                                    </span>\n                                </li>\n                            })}\n\n                        </ul>\n                    </div>\n\n                    <div className=\"makePayment w-full md:w-1/2 bg-slate-900 rounded-lg text-white px-2 md:p-10\">\n                        <h2 className='text-2xl font-bold my-5'>Make a Payment</h2>\n                        <div className='flex gap-2 flex-col'>\n                            {/* input for name and message   */}\n                            <div>\n\n                                <input onChange={handleChange} value={paymentform.name} name='name' type=\"text\" className='w-full p-3 rounded-lg bg-slate-800' placeholder='Enter Name' />\n                            </div>\n                            <input onChange={handleChange} value={paymentform.message} name='message' type=\"text\" className='w-full p-3 rounded-lg bg-slate-800' placeholder='Enter Message' />\n\n\n                            <input onChange={handleChange} value={paymentform.amount} name=\"amount\" type=\"text\" className='w-full p-3 rounded-lg bg-slate-800' placeholder='Enter Amount' />\n\n\n                            <button onClick={() => pay(Number.parseInt(paymentform.amount) * 100)} type=\"button\" className=\"text-white bg-gradient-to-br from-purple-900 to-blue-900 hover:bg-gradient-to-bl focus:ring-4 focus:outline-none focus:ring-blue-300 dark:focus:ring-blue-800 font-medium rounded-lg text-sm px-5 py-2.5 text-center me-2 mb-2 disabled:bg-slate-600 disabled:from-purple-100\" disabled={paymentform.name?.length < 3 || paymentform.message?.length < 4 || paymentform.amount?.length<1}>Pay</button>\n\n                        </div>\n                        {/* Or choose from these amounts  */}\n                        <div className='flex flex-col md:flex-row gap-2 mt-5'>\n                            <button className='bg-slate-800 p-3 rounded-lg' onClick={() => pay(1000)}>Pay ₹10</button>\n                            <button className='bg-slate-800 p-3 rounded-lg' onClick={() => pay(2000)}>Pay ₹20</button>\n                            <button className='bg-slate-800 p-3 rounded-lg' onClick={() => pay(3000)}>Pay ₹30</button>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </>\n    )\n}\n\nexport default PaymentPage\n"
  },
  {
    "path": "Video 131/components/SessionWrapper.js",
    "content": "\"use client\"\nimport { SessionProvider } from \"next-auth/react\"\n\nexport default function SessionWrapper({children}) {\n  return (\n    <SessionProvider>\n      {children}\n    </SessionProvider>\n  )\n}"
  },
  {
    "path": "Video 131/db/connectDb.js",
    "content": "\nimport mongoose from \"mongoose\";\n\nconst connectDb = async () => {\n        try {\n            const conn = await mongoose.connect(process.env.MONGO_URI, {\n                useNewUrlParser: true,\n            });\n            console.log(`MongoDB Connected: ${conn.connection.host}`);\n            return conn;\n            \n        } catch (error) {\n            console.error(error.message);\n            process.exit(1);\n        }\n    }\n\n  export default connectDb;"
  },
  {
    "path": "Video 131/jsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"paths\": {\n      \"@/*\": [\"./*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "Video 131/models/Payment.js",
    "content": "import mongoose from \"mongoose\";\nconst { Schema, model } = mongoose;\n\nconst PaymentSchema = new Schema({\n    name: { type: String, required: true },\n    to_user: { type: String, required: true },\n    oid: { type: String, required: true },\n    message: { type: String },\n    amount: { type: Number, required: true },\n    createdAt: { type: Date, default: Date.now },\n    updatedAt: { type: Date, default: Date.now }, \n    done: { type: Boolean, default: false },\n    });\n\n \nexport default mongoose.models.Payment || model(\"Payment\", PaymentSchema);;\n\n"
  },
  {
    "path": "Video 131/models/User.js",
    "content": "import mongoose from \"mongoose\";\nconst { Schema, model } = mongoose;\n\nconst UserSchema = new Schema({\n    email: { type: String, required: true },\n    name: { type: String},\n    username: { type: String, required: true },\n    profilepic: {type: String},\n    coverpic: {type: String},\n    razorpayid: { type: String },\n    razorpaysecret: { type: String },\n    createdAt: { type: Date, default: Date.now },\n    updatedAt: { type: Date, default: Date.now },\n    });\n\n \nexport default mongoose.models.User || model(\"User\", UserSchema);;"
  },
  {
    "path": "Video 131/next.config.mjs",
    "content": "/** @type {import('next').NextConfig} */\nconst nextConfig = {};\n\nexport default nextConfig;\n"
  },
  {
    "path": "Video 131/package.json",
    "content": "{\n  \"name\": \"get-me-a-chai\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"build\": \"next build\",\n    \"start\": \"next start\",\n    \"lint\": \"next lint\"\n  },\n  \"dependencies\": {\n    \"mongoose\": \"^8.2.2\",\n    \"next\": \"^14.1.3\",\n    \"next-auth\": \"^4.24.7\",\n    \"razorpay\": \"^2.9.2\",\n    \"react\": \"^18\",\n    \"react-dom\": \"^18\",\n    \"react-toastify\": \"^9.1.3\"\n  },\n  \"devDependencies\": {\n    \"autoprefixer\": \"^10.0.1\",\n    \"eslint\": \"^8\",\n    \"eslint-config-next\": \"14.1.3\",\n    \"postcss\": \"^8\",\n    \"tailwindcss\": \"^3.3.0\"\n  }\n}\n"
  },
  {
    "path": "Video 131/postcss.config.js",
    "content": "module.exports = {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {},\n  },\n};\n"
  },
  {
    "path": "Video 131/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\n    \"./pages/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./components/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./app/**/*.{js,ts,jsx,tsx,mdx}\",\n  ],\n  theme: {\n    extend: {\n      backgroundImage: {\n        \"gradient-radial\": \"radial-gradient(var(--tw-gradient-stops))\",\n        \"gradient-conic\":\n          \"conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))\",\n      },\n    },\n  },\n  plugins: [],\n};\n"
  },
  {
    "path": "Video 132/next-navigation-tutorial/.eslintrc.json",
    "content": "{\n  \"extends\": \"next/core-web-vitals\"\n}\n"
  },
  {
    "path": "Video 132/next-navigation-tutorial/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n.yarn/install-state.gz\n\n# testing\n/coverage\n\n# next.js\n/.next/\n/out/\n\n# production\n/build\n\n# misc\n.DS_Store\n*.pem\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# local env files\n.env*.local\n\n# vercel\n.vercel\n\n# typescript\n*.tsbuildinfo\nnext-env.d.ts\n"
  },
  {
    "path": "Video 132/next-navigation-tutorial/README.md",
    "content": "This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).\n\n## Getting Started\n\nFirst, run the development server:\n\n```bash\nnpm run dev\n# or\nyarn dev\n# or\npnpm dev\n# or\nbun dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) with your browser to see the result.\n\nYou can start editing the page by modifying `app/page.js`. The page auto-updates as you edit the file.\n\nThis project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.\n\n## Learn More\n\nTo learn more about Next.js, take a look at the following resources:\n\n- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.\n- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.\n\nYou can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!\n\n## Deploy on Vercel\n\nThe easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.\n\nCheck out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.\n"
  },
  {
    "path": "Video 132/next-navigation-tutorial/app/about/page.js",
    "content": "import React from 'react'\n\nconst About = () => {\n  return (\n    <div>About</div>\n  )\n}\n\nexport default About"
  },
  {
    "path": "Video 132/next-navigation-tutorial/app/blogpost/[slug]/page.js",
    "content": "\"use client\"\nimport React, { useEffect } from 'react'\nimport { useParams } from 'next/navigation'\nimport { useRouter } from 'next/navigation'\n\nconst page = () => {\n    const params = useParams()\n    const router = useRouter()\n\n    useEffect(() => {\n        setTimeout(() => { \n            router.push('/dashboard')\n        }, 2333);\n    }, [])\n    \n  return (\n    <div>{params.slug}\n    \n    <button type=\"button\" onClick={() => router.push('/dashboard')}>\n      Dashboard\n    </button>\n    </div>\n  )\n}\n\nexport default page"
  },
  {
    "path": "Video 132/next-navigation-tutorial/app/globals.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n:root {\n  --background: #ffffff;\n  --foreground: #171717;\n}\n\n@media (prefers-color-scheme: dark) {\n  :root {\n    --background: #0a0a0a;\n    --foreground: #ededed;\n  }\n}\n\nbody {\n  color: var(--foreground);\n  background: var(--background);\n  font-family: Arial, Helvetica, sans-serif;\n}\n\n@layer utilities {\n  .text-balance {\n    text-wrap: balance;\n  }\n}\n"
  },
  {
    "path": "Video 132/next-navigation-tutorial/app/layout.js",
    "content": "import localFont from \"next/font/local\";\nimport \"./globals.css\";\nimport Navbar from \"@/components/Navbar\";\n\nconst geistSans = localFont({\n  src: \"./fonts/GeistVF.woff\",\n  variable: \"--font-geist-sans\",\n  weight: \"100 900\",\n});\nconst geistMono = localFont({\n  src: \"./fonts/GeistMonoVF.woff\",\n  variable: \"--font-geist-mono\",\n  weight: \"100 900\",\n});\n\nexport const metadata = {\n  title: \"Create Next App\",\n  description: \"Generated by create next app\",\n};\n\nexport default function RootLayout({ children }) {\n  return (\n    <html lang=\"en\">\n      <body\n        className={`${geistSans.variable} ${geistMono.variable} antialiased`}\n      >\n        <Navbar/>\n        {children}\n      </body>\n    </html>\n  );\n}\n"
  },
  {
    "path": "Video 132/next-navigation-tutorial/app/page.js",
    "content": "\"use client\"\n\nimport Image from \"next/image\";\nimport { useSearchParams } from \"next/navigation\";\n\nexport default function Home() {\n  const searchparms = useSearchParams()\n  return (\n    <div>\n      Hey this is our page and blog is {searchparms.get('blog')} and utm source is {searchparms.get('utm_source')}\n    </div>\n  );\n}\n"
  },
  {
    "path": "Video 132/next-navigation-tutorial/components/Navbar.js",
    "content": "\"use client\"\n\nimport React from 'react'\nimport { usePathname } from \"next/navigation\";\n\nconst Navbar = () => {\n    \n  const pathname = usePathname()\n  return (\n    <div>\n\n        <div>Navbar</div>\n        <div>You are inside {pathname}</div>\n    </div>\n  )\n}\n\nexport default Navbar"
  },
  {
    "path": "Video 132/next-navigation-tutorial/jsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"paths\": {\n      \"@/*\": [\"./*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "Video 132/next-navigation-tutorial/next.config.mjs",
    "content": "/** @type {import('next').NextConfig} */\nconst nextConfig = {};\n\nexport default nextConfig;\n"
  },
  {
    "path": "Video 132/next-navigation-tutorial/package.json",
    "content": "{\n  \"name\": \"next-navigation-tutorial\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"build\": \"next build\",\n    \"start\": \"next start\",\n    \"lint\": \"next lint\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18\",\n    \"react-dom\": \"^18\",\n    \"next\": \"14.2.15\"\n  },\n  \"devDependencies\": {\n    \"postcss\": \"^8\",\n    \"tailwindcss\": \"^3.4.1\",\n    \"eslint\": \"^8\",\n    \"eslint-config-next\": \"14.2.15\"\n  }\n}\n"
  },
  {
    "path": "Video 132/next-navigation-tutorial/postcss.config.mjs",
    "content": "/** @type {import('postcss-load-config').Config} */\nconst config = {\n  plugins: {\n    tailwindcss: {},\n  },\n};\n\nexport default config;\n"
  },
  {
    "path": "Video 132/next-navigation-tutorial/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\n    \"./pages/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./components/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./app/**/*.{js,ts,jsx,tsx,mdx}\",\n  ],\n  theme: {\n    extend: {\n      colors: {\n        background: \"var(--background)\",\n        foreground: \"var(--foreground)\",\n      },\n    },\n  },\n  plugins: [],\n};\n"
  },
  {
    "path": "Video 133/ssr-ssg-isr/.eslintrc.json",
    "content": "{\n  \"extends\": \"next/core-web-vitals\"\n}\n"
  },
  {
    "path": "Video 133/ssr-ssg-isr/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n.yarn/install-state.gz\n\n# testing\n/coverage\n\n# next.js\n/.next/\n/out/\n\n# production\n/build\n\n# misc\n.DS_Store\n*.pem\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# local env files\n.env*.local\n\n# vercel\n.vercel\n\n# typescript\n*.tsbuildinfo\nnext-env.d.ts\n"
  },
  {
    "path": "Video 133/ssr-ssg-isr/README.md",
    "content": "This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).\n\n## Getting Started\n\nFirst, run the development server:\n\n```bash\nnpm run dev\n# or\nyarn dev\n# or\npnpm dev\n# or\nbun dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) with your browser to see the result.\n\nYou can start editing the page by modifying `app/page.js`. The page auto-updates as you edit the file.\n\nThis project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.\n\n## SSR - Server Side Rendering\nThis is default behaviour\n\n## SSG - Static Site Generation\nAny content which does not have network calls is a static page by default\n\n## ISG or ISR\nfetch in next.js caches the response\nTo opt out use:\n```\nexport const dynamic = 'force-dynamic';\n```\nHowever, there are exceptions, fetch requests are not cached when:\n\n- Used inside a Server Action.\n- Used inside a Route Handler that uses the POST method.\n\n "
  },
  {
    "path": "Video 133/ssr-ssg-isr/app/globals.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n:root {\n  --background: #ffffff;\n  --foreground: #171717;\n}\n\n@media (prefers-color-scheme: dark) {\n  :root {\n    --background: #0a0a0a;\n    --foreground: #ededed;\n  }\n}\n\nbody {\n  color: var(--foreground);\n  background: var(--background);\n  font-family: Arial, Helvetica, sans-serif;\n}\n\n@layer utilities {\n  .text-balance {\n    text-wrap: balance;\n  }\n}\n"
  },
  {
    "path": "Video 133/ssr-ssg-isr/app/layout.js",
    "content": "import localFont from \"next/font/local\";\nimport \"./globals.css\";\n\nconst geistSans = localFont({\n  src: \"./fonts/GeistVF.woff\",\n  variable: \"--font-geist-sans\",\n  weight: \"100 900\",\n});\nconst geistMono = localFont({\n  src: \"./fonts/GeistMonoVF.woff\",\n  variable: \"--font-geist-mono\",\n  weight: \"100 900\",\n});\n\nexport const metadata = {\n  title: \"Create Next App\",\n  description: \"Generated by create next app\",\n};\n\nexport default function RootLayout({ children }) {\n  return (\n    <html lang=\"en\">\n      <body\n        className={`${geistSans.variable} ${geistMono.variable} antialiased`}\n      >\n        {children}\n      </body>\n    </html>\n  );\n}\n"
  },
  {
    "path": "Video 133/ssr-ssg-isr/app/page.js",
    "content": "import Image from \"next/image\";\n\nexport default async function Home() { \n  \n  let data = await fetch('https://api.vercel.app/blog',  { next: { revalidate: 3600 } })\n  let posts = await data.json()\n  return (\n    <ul>\n      {posts.map((post) => (\n        <li key={post.id}>{post.title}</li>\n      ))}\n    </ul>\n  )\n}\n\n// export const dynamic = 'force-dynamic'"
  },
  {
    "path": "Video 133/ssr-ssg-isr/jsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"paths\": {\n      \"@/*\": [\"./*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "Video 133/ssr-ssg-isr/next.config.mjs",
    "content": "/** @type {import('next').NextConfig} */\nconst nextConfig = {};\n\nexport default nextConfig;\n"
  },
  {
    "path": "Video 133/ssr-ssg-isr/package.json",
    "content": "{\n  \"name\": \"ssr-isg-isr\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"build\": \"next build\",\n    \"start\": \"next start\",\n    \"lint\": \"next lint\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18\",\n    \"react-dom\": \"^18\",\n    \"next\": \"14.2.15\"\n  },\n  \"devDependencies\": {\n    \"postcss\": \"^8\",\n    \"tailwindcss\": \"^3.4.1\",\n    \"eslint\": \"^8\",\n    \"eslint-config-next\": \"14.2.15\"\n  }\n}\n"
  },
  {
    "path": "Video 133/ssr-ssg-isr/postcss.config.mjs",
    "content": "/** @type {import('postcss-load-config').Config} */\nconst config = {\n  plugins: {\n    tailwindcss: {},\n  },\n};\n\nexport default config;\n"
  },
  {
    "path": "Video 133/ssr-ssg-isr/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\n    \"./pages/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./components/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./app/**/*.{js,ts,jsx,tsx,mdx}\",\n  ],\n  theme: {\n    extend: {\n      colors: {\n        background: \"var(--background)\",\n        foreground: \"var(--foreground)\",\n      },\n    },\n  },\n  plugins: [],\n};\n"
  },
  {
    "path": "Video 134/environment-variables/.eslintrc.json",
    "content": "{\n  \"extends\": \"next/core-web-vitals\"\n}\n"
  },
  {
    "path": "Video 134/environment-variables/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n.yarn/install-state.gz\n\n# testing\n/coverage\n\n# next.js\n/.next/\n/out/\n\n# production\n/build\n\n# misc\n.DS_Store\n*.pem\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# local env files\n.env*.local\n\n# vercel\n.vercel\n\n# typescript\n*.tsbuildinfo\nnext-env.d.ts\n"
  },
  {
    "path": "Video 134/environment-variables/README.md",
    "content": "This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).\n\n## Getting Started\n\nFirst, run the development server:\n\n```bash\nnpm run dev\n# or\nyarn dev\n# or\npnpm dev\n# or\nbun dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) with your browser to see the result.\n\nYou can start editing the page by modifying `app/page.js`. The page auto-updates as you edit the file.\n\nThis project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.\n\n## Learn More\n\nTo learn more about Next.js, take a look at the following resources:\n\n- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.\n- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.\n\nYou can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!\n\n## Deploy on Vercel\n\nThe easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.\n\nCheck out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.\n"
  },
  {
    "path": "Video 134/environment-variables/app/globals.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n:root {\n  --background: #ffffff;\n  --foreground: #171717;\n}\n\n@media (prefers-color-scheme: dark) {\n  :root {\n    --background: #0a0a0a;\n    --foreground: #ededed;\n  }\n}\n\nbody {\n  color: var(--foreground);\n  background: var(--background);\n  font-family: Arial, Helvetica, sans-serif;\n}\n\n@layer utilities {\n  .text-balance {\n    text-wrap: balance;\n  }\n}\n"
  },
  {
    "path": "Video 134/environment-variables/app/layout.js",
    "content": "import localFont from \"next/font/local\";\nimport \"./globals.css\";\n\nconst geistSans = localFont({\n  src: \"./fonts/GeistVF.woff\",\n  variable: \"--font-geist-sans\",\n  weight: \"100 900\",\n});\nconst geistMono = localFont({\n  src: \"./fonts/GeistMonoVF.woff\",\n  variable: \"--font-geist-mono\",\n  weight: \"100 900\",\n});\n\nexport const metadata = {\n  title: \"Create Next App\",\n  description: \"Generated by create next app\",\n};\n\nexport default function RootLayout({ children }) {\n  return (\n    <html lang=\"en\">\n      <body\n        className={`${geistSans.variable} ${geistMono.variable} antialiased`}\n      >\n        {children}\n      </body>\n    </html>\n  );\n}\n"
  },
  {
    "path": "Video 134/environment-variables/app/page.js",
    "content": "import Image from \"next/image\";\n\nexport default function Home() {\n  // console.log(\"The id is: \", process.env.ID)\n  // console.log(\"The secret is: \", process.env.SECRET)\n  return (\n    <div>\n      Hey this is home. The id is {process.env.NEXT_PUBLIC_ID} and secret is {process.env.SECRET} and name is {process.env.NAME}\n    </div>\n  );\n}\n"
  },
  {
    "path": "Video 134/environment-variables/jsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"paths\": {\n      \"@/*\": [\"./*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "Video 134/environment-variables/next.config.mjs",
    "content": "/** @type {import('next').NextConfig} */\nconst nextConfig = {};\n\nexport default nextConfig;\n"
  },
  {
    "path": "Video 134/environment-variables/package.json",
    "content": "{\n  \"name\": \"environment-variables\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"build\": \"next build\",\n    \"start\": \"next start\",\n    \"lint\": \"next lint\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18\",\n    \"react-dom\": \"^18\",\n    \"next\": \"14.2.15\"\n  },\n  \"devDependencies\": {\n    \"postcss\": \"^8\",\n    \"tailwindcss\": \"^3.4.1\",\n    \"eslint\": \"^8\",\n    \"eslint-config-next\": \"14.2.15\"\n  }\n}\n"
  },
  {
    "path": "Video 134/environment-variables/postcss.config.mjs",
    "content": "/** @type {import('postcss-load-config').Config} */\nconst config = {\n  plugins: {\n    tailwindcss: {},\n  },\n};\n\nexport default config;\n"
  },
  {
    "path": "Video 134/environment-variables/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\n    \"./pages/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./components/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./app/**/*.{js,ts,jsx,tsx,mdx}\",\n  ],\n  theme: {\n    extend: {\n      colors: {\n        background: \"var(--background)\",\n        foreground: \"var(--foreground)\",\n      },\n    },\n  },\n  plugins: [],\n};\n"
  },
  {
    "path": "Video 135/styles-in-nextjs/.eslintrc.json",
    "content": "{\n  \"extends\": \"next/core-web-vitals\"\n}\n"
  },
  {
    "path": "Video 135/styles-in-nextjs/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n.yarn/install-state.gz\n\n# testing\n/coverage\n\n# next.js\n/.next/\n/out/\n\n# production\n/build\n\n# misc\n.DS_Store\n*.pem\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# local env files\n.env*.local\n\n# vercel\n.vercel\n\n# typescript\n*.tsbuildinfo\nnext-env.d.ts\n"
  },
  {
    "path": "Video 135/styles-in-nextjs/README.md",
    "content": "This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).\n\n## Getting Started\n\nFirst, run the development server:\n\n```bash\nnpm run dev\n# or\nyarn dev\n# or\npnpm dev\n# or\nbun dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) with your browser to see the result.\n\nYou can start editing the page by modifying `app/page.js`. The page auto-updates as you edit the file.\n\nThis project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.\n\n## Learn More\n\nTo learn more about Next.js, take a look at the following resources:\n\n- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.\n- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.\n\nYou can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!\n\n## Deploy on Vercel\n\nThe easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.\n\nCheck out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.\n"
  },
  {
    "path": "Video 135/styles-in-nextjs/app/about/page.js",
    "content": "\"use client\"\nimport React from 'react'\n\nconst About = () => {\n    return (\n        <div>\n\n            <div className='container'>\n\n                <h1>This is about me</h1>\n                <p>Hey I am a good boy</p>\n\n                <style jsx>{`\n            .container{\n                background-color: red;\n                color: green;\n                }\n                `}\n                </style>\n            </div>\n            <div className=\"container\">\n                Hey I am good\n            </div>\n        </div>\n    )\n}\n\nexport default About"
  },
  {
    "path": "Video 135/styles-in-nextjs/app/globals.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n:root {\n  --background: #ffffff;\n  --foreground: #171717;\n}\n\n@media (prefers-color-scheme: dark) {\n  :root {\n    --background: #0a0a0a;\n    --foreground: #ededed;\n  }\n}\n\nbody {\n  color: var(--foreground);\n  background: var(--background);\n  font-family: Arial, Helvetica, sans-serif;\n}\n\n@layer utilities {\n  .text-balance {\n    text-wrap: balance;\n  }\n}\n"
  },
  {
    "path": "Video 135/styles-in-nextjs/app/layout.js",
    "content": "import localFont from \"next/font/local\";\nimport \"./globals.css\";\n\nconst geistSans = localFont({\n  src: \"./fonts/GeistVF.woff\",\n  variable: \"--font-geist-sans\",\n  weight: \"100 900\",\n});\nconst geistMono = localFont({\n  src: \"./fonts/GeistMonoVF.woff\",\n  variable: \"--font-geist-mono\",\n  weight: \"100 900\",\n});\n\nexport const metadata = {\n  title: \"Create Next App\",\n  description: \"Generated by create next app\",\n};\n\nexport default function RootLayout({ children }) {\n  return (\n    <html lang=\"en\">\n      <body\n        className={`${geistSans.variable} ${geistMono.variable} antialiased`}\n      >\n        {children}\n      </body>\n    </html>\n  );\n}\n"
  },
  {
    "path": "Video 135/styles-in-nextjs/app/page.js",
    "content": "import Image from \"next/image\";\nimport styles from \"../styles/home.module.css\"\n\nexport default function Home() {\n  return (\n    <div className={styles.red}>\n      Hey\n    </div>\n  );\n}\n"
  },
  {
    "path": "Video 135/styles-in-nextjs/jsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"paths\": {\n      \"@/*\": [\"./*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "Video 135/styles-in-nextjs/next.config.mjs",
    "content": "/** @type {import('next').NextConfig} */\nconst nextConfig = {};\n\nexport default nextConfig;\n"
  },
  {
    "path": "Video 135/styles-in-nextjs/package.json",
    "content": "{\n  \"name\": \"styles-in-nextjs\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"build\": \"next build\",\n    \"start\": \"next start\",\n    \"lint\": \"next lint\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18\",\n    \"react-dom\": \"^18\",\n    \"next\": \"14.2.15\"\n  },\n  \"devDependencies\": {\n    \"postcss\": \"^8\",\n    \"tailwindcss\": \"^3.4.1\",\n    \"eslint\": \"^8\",\n    \"eslint-config-next\": \"14.2.15\"\n  }\n}\n"
  },
  {
    "path": "Video 135/styles-in-nextjs/postcss.config.mjs",
    "content": "/** @type {import('postcss-load-config').Config} */\nconst config = {\n  plugins: {\n    tailwindcss: {},\n  },\n};\n\nexport default config;\n"
  },
  {
    "path": "Video 135/styles-in-nextjs/styles/Home.module.css",
    "content": ".red{\n    color: red;\n}"
  },
  {
    "path": "Video 135/styles-in-nextjs/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\n    \"./pages/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./components/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./app/**/*.{js,ts,jsx,tsx,mdx}\",\n  ],\n  theme: {\n    extend: {\n      colors: {\n        background: \"var(--background)\",\n        foreground: \"var(--foreground)\",\n      },\n    },\n  },\n  plugins: [],\n};\n"
  },
  {
    "path": "Video 136/bitlinks/.eslintrc.json",
    "content": "{\n  \"extends\": \"next/core-web-vitals\"\n}\n"
  },
  {
    "path": "Video 136/bitlinks/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.*\n.yarn/*\n!.yarn/patches\n!.yarn/plugins\n!.yarn/releases\n!.yarn/versions\n\n# testing\n/coverage\n\n# next.js\n/.next/\n/out/\n\n# production\n/build\n\n# misc\n.DS_Store\n*.pem\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# env files (can opt-in for commiting if needed)\n.env*\n\n# vercel\n.vercel\n\n# typescript\n*.tsbuildinfo\nnext-env.d.ts\n"
  },
  {
    "path": "Video 136/bitlinks/BitLinks.postman_collection.json",
    "content": "{\n\t\"info\": {\n\t\t\"_postman_id\": \"2f5d249a-7600-45b0-91e4-972d09030847\",\n\t\t\"name\": \"BitLinks\",\n\t\t\"schema\": \"https://schema.getpostman.com/json/collection/v2.1.0/collection.json\",\n\t\t\"_exporter_id\": \"24335059\",\n\t\t\"_collection_link\": \"https://martian-station-78370.postman.co/workspace/Sigma-Web-Development-Express~5db32297-9967-4e1b-afb8-3d38caf12a97/collection/24335059-2f5d249a-7600-45b0-91e4-972d09030847?action=share&source=collection_link&creator=24335059\"\n\t},\n\t\"item\": [\n\t\t{\n\t\t\t\"name\": \"http://localhost:3000/api/generate\",\n\t\t\t\"request\": {\n\t\t\t\t\"method\": \"POST\",\n\t\t\t\t\"header\": [],\n\t\t\t\t\"body\": {\n\t\t\t\t\t\"mode\": \"raw\",\n\t\t\t\t\t\"raw\": \"{\\r\\n    \\\"url\\\": \\\"https://facebook.com/codewithharry\\\",\\r\\n    \\\"shorturl\\\": \\\"google2\\\"\\r\\n}\",\n\t\t\t\t\t\"options\": {\n\t\t\t\t\t\t\"raw\": {\n\t\t\t\t\t\t\t\"language\": \"json\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"url\": {\n\t\t\t\t\t\"raw\": \"http://localhost:3000/api/generate\",\n\t\t\t\t\t\"protocol\": \"http\",\n\t\t\t\t\t\"host\": [\n\t\t\t\t\t\t\"localhost\"\n\t\t\t\t\t],\n\t\t\t\t\t\"port\": \"3000\",\n\t\t\t\t\t\"path\": [\n\t\t\t\t\t\t\"api\",\n\t\t\t\t\t\t\"generate\"\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"response\": []\n\t\t},\n\t\t{\n\t\t\t\"name\": \"http://localhost:3000\",\n\t\t\t\"request\": {\n\t\t\t\t\"method\": \"GET\",\n\t\t\t\t\"header\": [],\n\t\t\t\t\"url\": {\n\t\t\t\t\t\"raw\": \"http://localhost:3000\",\n\t\t\t\t\t\"protocol\": \"http\",\n\t\t\t\t\t\"host\": [\n\t\t\t\t\t\t\"localhost\"\n\t\t\t\t\t],\n\t\t\t\t\t\"port\": \"3000\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"response\": []\n\t\t}\n\t]\n}"
  },
  {
    "path": "Video 136/bitlinks/README.md",
    "content": "This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).\n\n## Getting Started\n\nFirst, run the development server:\n\n```bash\nnpm run dev\n# or\nyarn dev\n# or\npnpm dev\n# or\nbun dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) with your browser to see the result.\n\nYou can start editing the page by modifying `app/page.js`. The page auto-updates as you edit the file.\n\nThis project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.\n\n## Learn More\n\nTo learn more about Next.js, take a look at the following resources:\n\n- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.\n- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.\n\nYou can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!\n\n## Deploy on Vercel\n\nThe easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.\n\nCheck out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.\n"
  },
  {
    "path": "Video 136/bitlinks/app/[shorturl]/page.js",
    "content": "import { redirect } from \"next/navigation\"\nimport clientPromise from \"@/lib/mongodb\"\n\n\nexport default async function Page({ params }) {\n    const shorturl = (await params).shorturl\n\n    const client = await clientPromise;\n    const db = client.db(\"bitlinks\")\n    const collection = db.collection(\"url\")\n\n    const doc = await collection.findOne({shorturl: shorturl})\n    console.log(doc)\n    if(doc){\n         redirect(doc.url)\n    }\n    else{\n        redirect(`${process.env.NEXT_PUBLIC_HOST}`)\n    }\n\n    return <div>My Post: {url}</div>\n  }"
  },
  {
    "path": "Video 136/bitlinks/app/api/generate/route.js",
    "content": "\nimport clientPromise from \"@/lib/mongodb\"\n\nexport async function POST(request) {\n\n    const body = await request.json() \n    const client = await clientPromise;\n    const db = client.db(\"bitlinks\")\n    const collection = db.collection(\"url\")\n\n    // Check if the short url exists\n    const doc = await collection.findOne({shorturl: body.shorturl})\n    if(doc){\n        return Response.json({success: false, error: true,  message: 'URL already exists!' })\n    }\n\n    const result = await collection.insertOne({\n        url: body.url,\n        shorturl: body.shorturl\n    })\n\n    return Response.json({success: true, error: false,  message: 'URL Generated Successfully' })\n  }"
  },
  {
    "path": "Video 136/bitlinks/app/globals.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n"
  },
  {
    "path": "Video 136/bitlinks/app/layout.js",
    "content": "import localFont from \"next/font/local\";\nimport \"./globals.css\";\nimport Navbar from \"@/components/Navbar\"; \n\n\nconst geistSans = localFont({\n  src: \"./fonts/GeistVF.woff\",\n  variable: \"--font-geist-sans\",\n  weight: \"100 900\",\n});\nconst geistMono = localFont({\n  src: \"./fonts/GeistMonoVF.woff\",\n  variable: \"--font-geist-mono\",\n  weight: \"100 900\",\n});\n\nexport const metadata = {\n  title: \"Bitlinks - Your trusted URL shortener\",\n  description: \"Bitlinks helps you shorten your Urls easily\",\n};\n\nexport default function RootLayout({ children }) {\n  return (\n    <html lang=\"en\">\n      <body\n        className={`${geistSans.variable} ${geistMono.variable} antialiased bg-purple-50`}\n      > \n      <Navbar/>\n        {children}\n      </body>\n    </html>\n  );\n}\n"
  },
  {
    "path": "Video 136/bitlinks/app/page.js",
    "content": "import Image from \"next/image\";\nimport localFont from \"next/font/local\";\nimport Link from \"next/link\";\n\n\n\nconst poppins = localFont({\n  src: \"./fonts/Poppins-ExtraBold.ttf\",\n  variable: \"--font-poppins\",\n  weight: \"100 900\",\n});\n\nexport default function Home() {\n  return (\n    <main className=\"bg-purple-100\">\n      <section className=\"grid grid-cols-2 h-[50vh]\">\n        <div className=\"flex flex-col gap-4 items-center justify-center\">\n          <p className={`text-3xl font-bold ${poppins.className}`}>\n            The best URL shortener in the Market\n          </p>\n          <p className=\"px-56 text-center\">\n            We are the most straightfoward URL Shortener in the world. Most of the url shorteners will track you or ask you to give your details for login. We understand your needs and hence we have created this URL shortener\n          </p>\n          <div className='flex gap-3 justify-start'>\n          <Link href=\"/shorten\"><button className='bg-purple-500 rounded-lg shadow-lg p-3 py-1 font-bold text-white'>Try Now</button></Link>\n          <Link href=\"/github\"><button className='bg-purple-500 rounded-lg shadow-lg p-3 py-1 font-bold text-white'>GitHub</button></Link>\n        </div>\n        </div>\n        <div className=\" flex justify-start relative\">\n          <Image className=\"mix-blend-darken\" alt=\"an Image of a vector\" src={\"/vector.jpg\"} fill={true}    />\n        </div>\n\n      </section>\n    </main>\n  );\n}\n"
  },
  {
    "path": "Video 136/bitlinks/app/shorten/page.js",
    "content": "\"use client\"\nimport Link from 'next/link'\nimport React, { useState } from 'react'\n\nconst Shorten = () => {\n    const [url, seturl] = useState(\"\")\n    const [shorturl, setshorturl] = useState(\"\")\n    const [generated, setGenerated] = useState(\"\")\n\n    const generate = () => {\n        const myHeaders = new Headers();\n        myHeaders.append(\"Content-Type\", \"application/json\");\n\n        const raw = JSON.stringify({\n            \"url\": url,\n            \"shorturl\": shorturl\n        });\n\n        const requestOptions = {\n            method: \"POST\",\n            headers: myHeaders,\n            body: raw,\n            redirect: \"follow\"\n        };\n\n        fetch(\"/api/generate\", requestOptions)\n            .then((response) => response.json())\n            .then((result) => {\n                setGenerated(`${process.env.NEXT_PUBLIC_HOST}/${shorturl}`)\n                seturl(\"\")   \n                setshorturl(\"\")\n                console.log(result)\n                alert(result.message)\n            \n            })\n            .catch((error) => console.error(error));\n    }\n\n\n    return (\n        <div className='mx-auto max-w-lg bg-purple-100 my-16 p-8 rounded-lg flex flex-col gap-4'>\n            <h1 className='font-bold text-2xl'>Generate your short URLs</h1>\n            <div className='flex flex-col gap-2'>\n                <input type=\"text\"\n                    value={url}\n                    className='px-4 py-2 focus:outline-purple-600 rounded-md'\n                    placeholder='Enter your URL'\n                    onChange={e => { seturl(e.target.value) }} />\n\n                <input type=\"text\"\n                    value={shorturl}\n                    className='px-4 py-2 focus:outline-purple-600 rounded-md'\n                    placeholder='Enter your preferred short URL text'\n                    onChange={e => { setshorturl(e.target.value) }} />\n                <button onClick={generate} className='bg-purple-500 rounded-lg shadow-lg p-3 py-1 my-3 font-bold text-white'>Generate</button>\n            </div>\n\n            {generated && <> <span className='font-bold text-lg'>Your Link </span><code><Link target=\"_blank\" href={generated}>{generated}</Link> \n                </code></>}\n        </div>\n    )\n}\n\nexport default Shorten"
  },
  {
    "path": "Video 136/bitlinks/components/Navbar.js",
    "content": "import React from 'react'\nimport Link from 'next/link'\n\nconst Navbar = () => {\n  return (\n    <nav className='h-16 bg-purple-700 flex justify-between px-3 items-center text-white '>\n      <div className=\"logo font-bold text-2xl\"> \n        <Link href=\"/\">BitLinks</Link>\n      </div>\n      <ul className='flex justify-center gap-4 items-center'>\n        <Link href=\"/\"><li>Home</li></Link>\n        <Link href=\"/about\"><li>About</li></Link>\n        <Link href=\"/shorten\"><li>Shorten</li></Link>\n        <Link href=\"/contact\"><li>Contact Us</li></Link>\n        <li className='flex gap-3'>\n          <Link href=\"/shorten\"><button className='bg-purple-500 rounded-lg shadow-lg p-3 py-1 font-bold'>Try Now</button></Link>\n          <Link href=\"/github\"><button className='bg-purple-500 rounded-lg shadow-lg p-3 py-1 font-bold'>GitHub</button></Link>\n        </li>\n      </ul>\n    </nav>\n  )\n}\n\nexport default Navbar"
  },
  {
    "path": "Video 136/bitlinks/jsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"paths\": {\n      \"@/*\": [\"./*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "Video 136/bitlinks/lib/mongodb.js",
    "content": "// https://www.codewithharry.com/blogpost/%60how-to-integrate-mongodb-into-your-nextjs-apps%60/\n// lib/mongodb.js\n\nimport { MongoClient } from 'mongodb'\n\nconst uri = process.env.MONGODB_URI\nconst options = { \n  useNewUrlParser: true,\n}\n\nlet client\nlet clientPromise\n\nif (!process.env.MONGODB_URI) {\n  throw new Error('Add Mongo URI to .env.local')\n}\n\nif (process.env.NODE_ENV === 'development') { \n  if (!global._mongoClientPromise) {\n    client = new MongoClient(uri, options)\n    global._mongoClientPromise = client.connect()\n  }\n  clientPromise = global._mongoClientPromise\n} else {\n  client = new MongoClient(uri, options)\n  clientPromise = client.connect()\n}\n\nexport default clientPromise\n"
  },
  {
    "path": "Video 136/bitlinks/next.config.mjs",
    "content": "/** @type {import('next').NextConfig} */\nconst nextConfig = {};\n\nexport default nextConfig;\n"
  },
  {
    "path": "Video 136/bitlinks/package.json",
    "content": "{\n  \"name\": \"bitlinks\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"next dev --turbopack\",\n    \"build\": \"next build\",\n    \"start\": \"next start\",\n    \"lint\": \"next lint\"\n  },\n  \"dependencies\": {\n    \"mongodb\": \"^6.10.0\",\n    \"next\": \"15.0.2\",\n    \"react\": \"19.0.0-rc-02c0e824-20241028\",\n    \"react-dom\": \"19.0.0-rc-02c0e824-20241028\"\n  },\n  \"devDependencies\": {\n    \"eslint\": \"^8\",\n    \"eslint-config-next\": \"15.0.2\",\n    \"postcss\": \"^8\",\n    \"tailwindcss\": \"^3.4.1\"\n  }\n}\n"
  },
  {
    "path": "Video 136/bitlinks/postcss.config.mjs",
    "content": "/** @type {import('postcss-load-config').Config} */\nconst config = {\n  plugins: {\n    tailwindcss: {},\n  },\n};\n\nexport default config;\n"
  },
  {
    "path": "Video 136/bitlinks/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\n    \"./pages/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./components/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./app/**/*.{js,ts,jsx,tsx,mdx}\",\n  ],\n  theme: {\n    extend: {\n      colors: {\n        background: \"var(--background)\",\n        foreground: \"var(--foreground)\",\n      },\n    },\n  },\n  plugins: [],\n};\n"
  },
  {
    "path": "Video 137/linktree-clone/.eslintrc.json",
    "content": "{\n  \"extends\": \"next/core-web-vitals\"\n}\n"
  },
  {
    "path": "Video 137/linktree-clone/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.*\n.yarn/*\n!.yarn/patches\n!.yarn/plugins\n!.yarn/releases\n!.yarn/versions\n\n# testing\n/coverage\n\n# next.js\n/.next/\n/out/\n\n# production\n/build\n\n# misc\n.DS_Store\n*.pem\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# env files (can opt-in for commiting if needed)\n.env*\n\n# vercel\n.vercel\n\n# typescript\n*.tsbuildinfo\nnext-env.d.ts\n"
  },
  {
    "path": "Video 137/linktree-clone/README.md",
    "content": "This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).\n\n## Getting Started\n\nFirst, run the development server:\n\n```bash\nnpm run dev\n# or\nyarn dev\n# or\npnpm dev\n# or\nbun dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) with your browser to see the result.\n\nYou can start editing the page by modifying `app/page.js`. The page auto-updates as you edit the file.\n\nThis project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.\n\n## Learn More\n\nTo learn more about Next.js, take a look at the following resources:\n\n- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.\n- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.\n\nYou can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!\n\n## Deploy on Vercel\n\nThe easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.\n\nCheck out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.\n"
  },
  {
    "path": "Video 137/linktree-clone/app/[handle]/page.js",
    "content": "import Link from \"next/link\"\nimport clientPromise from \"@/lib/mongodb\"\nimport { notFound } from \"next/navigation\";\n\nexport default async function Page({ params }) {\n    const handle = (await params).handle\n    const client = await clientPromise;\n    const db = client.db(\"bittree\")\n    const collection = db.collection(\"links\")\n\n    // If the handle is already claimed, you cannot create the bittree\n    const item = await collection.findOne({handle: handle})\n    if(!item){\n        return notFound()\n    }\n\n    console.log(item)\n\n    const item2 = {\n        \"_id\": {\n            \"$oid\": \"6729e97390cf30c8f66c4c68\"\n        },\n        \"links\": [\n            {\n                \"link\": \"https://www.instagram.com/codewithharry/?hl=en\",\n                \"linktext\": \"Instagram\"\n            },\n            {\n                \"link\": \"https://www.codewithharry.com\",\n                \"linktext\": \"Website\"\n            },\n            {\n                \"link\": \"https://www.YouTube.com/codewithharry/?hl=en\",\n                \"linktext\": \"YouTube\"\n            }\n        ],\n        \"handle\": \"harry\",\n        \"pic\": \"https://avatars.githubusercontent.com/u/48705673?v=4\"\n    }\n    return <div className=\"flex min-h-screen bg-purple-400 justify-center items-start py-10\">\n        {item && <div className=\"photo flex justify-center flex-col items-center gap-4\"> \n            <img src={item.pic} alt=\"\" />\n            <span className=\"font-bold text-xl\">@{item.handle}</span>\n            <span className=\"desc w-80 text-center\">{item.desc}</span>\n            <div className=\"links\">\n                {item.links.map((item, index)=>{\n                    return <Link  key={index} href= {item.link}><div className=\"bg-purple-100 py-4 shadow-lg px-2 min-w-96 flex justify-center rounded-md my-3\">\n                       {item.linktext}\n                       \n                    </div></Link> \n                })}\n            </div>\n      </div>}\n    </div>\n}"
  },
  {
    "path": "Video 137/linktree-clone/app/api/add/route.js",
    "content": "import clientPromise from \"@/lib/mongodb\"\n\n\nexport async function POST(request) {\n    const body = await request.json()\n\n    const client = await clientPromise;\n    const db = client.db(\"bittree\")\n    const collection = db.collection(\"links\")\n\n    // If the handle is already claimed, you cannot create the bittree\n    const doc = await collection.findOne({handle: body.handle})\n\n    if (doc){\n      return Response.json({ success: false, error: true, message: 'This Bittree already exists!', result: null })\n    }\n\n    const result = await collection.insertOne(body)\n     \n    return Response.json({ success: true, error: false, message: 'Your Bittree has been generated!', result: result,  })\n  }"
  },
  {
    "path": "Video 137/linktree-clone/app/generate/page.js",
    "content": "\"use client\"\nimport React, { useState } from 'react'\nimport { ToastContainer, toast } from 'react-toastify';\nimport 'react-toastify/dist/ReactToastify.css';\nimport { useSearchParams } from 'next/navigation';\n\nconst Generate = () => {\n\n  const searchParams = useSearchParams()\n\n  // const [link, setlink] = useState(\"\")\n  // const [linktext, setlinktext] = useState(\"\")\n  const [links, setLinks] = useState([{link: \"\", linktext: \"\"}])\n  const [handle, sethandle] = useState(searchParams.get('handle'))\n  const [pic, setpic] = useState(\"\")\n  const [desc, setdesc] = useState(\"\")\n\n  const handleChange = (index, link, linktext) => { \n    setLinks((initialLinks)=>{\n      return initialLinks.map((item, i)=>{\n        if (i==index){\n          return {link, linktext}\n        }\n        else {\n          return item\n        }\n      })\n    })\n   }\n\n   const addLink = () => { \n    setLinks(links.concat([{link: \"\", linktext: \"\"}]))\n    }\n\n  const submitLinks = async () => {\n    const myHeaders = new Headers();\n    myHeaders.append(\"Content-Type\", \"application/json\");\n\n    const raw = JSON.stringify({\n      \"links\": links, \n      \"handle\": handle,\n      \"pic\": pic,\n      \"desc\": desc\n    });\n\n    console.log(raw)\n\n    const requestOptions = {\n      method: \"POST\",\n      headers: myHeaders,\n      body: raw,\n      redirect: \"follow\"\n    };\n\n   const r = await fetch(\"http://localhost:3000/api/add\", requestOptions)\n   const result = await r.json()\n   if(result.success){ \n     toast.success(result.message)\n     setLinks([])\n     setpic(\"\")\n     sethandle(\"\")\n    }\n    else{\n      toast.error(result.message)\n    }\n \n       \n  }\n\n\n  return (\n    <div className='bg-[#E9C0E9] min-h-screen grid grid-cols-2'>\n     \n      <div className=\"col1 flex justify-center items-center flex-col text-gray-900\">\n        <div className='flex flex-col gap-5 my-8'>\n          <h1 className='font-bold text-4xl'>Create your Bittree</h1>\n          <div className=\"item\">\n\n            <h2 className='font-semibold text-2xl'>Step 1: Claim your Handle</h2>\n            <div className='mx-4'>\n              <input value={handle || \"\"} onChange={e=>{sethandle(e.target.value)}} className='px-4 py-2 my-2 focus:outline-pink-500 rounded-full'\n                type=\"text\" placeholder='Choose a Handle' />\n            </div>\n          </div>\n          <div className=\"item\">\n            <h2 className='font-semibold text-2xl'>Step 2: Add Links</h2>\n            {links && links.map((item, index)=>{\n              return <div key={index} className='mx-4'>\n              <input value={item.linktext || \"\"} onChange={e=>{handleChange(index, item.link, e.target.value)}} className='px-4 py-2 mx-2 my-2 focus:outline-pink-500 rounded-full' type=\"text\" placeholder='Enter link text' />\n              <input value={item.link || \"\"} onChange={e=>{handleChange(index, e.target.value, item.linktext)}} className='px-4 py-2 mx-2 my-2 focus:outline-pink-500 rounded-full'\n                type=\"text\" placeholder='Enter link' />\n            </div>\n            })}\n              <button onClick={()=> addLink()} className='p-5 py-2 mx-2 bg-slate-900 text-white font-bold rounded-3xl'>+ Add Link</button>\n          </div>\n\n          <div className=\"item\">\n            <h2 className='font-semibold text-2xl'>Step 3: Add Picture and Description</h2>\n            <div className='mx-4 flex flex-col'>\n              <input value={pic || \"\"} onChange={e=>{setpic(e.target.value)}} className='px-4 py-2 mx-2 my-2 focus:outline-pink-500 rounded-full' type=\"text\" placeholder='Enter link to your Picture' />\n              <input value={desc || \"\"} onChange={e=>{setdesc(e.target.value)}} className='px-4 py-2 mx-2 my-2 focus:outline-pink-500 rounded-full' type=\"text\" placeholder='Enter description' />\n              <button disabled={pic == \"\" || handle==\"\" || links[0].linktext == \"\"} onClick={()=>{submitLinks()}} className='disabled:bg-slate-500 p-5 py-2 mx-2 w-fit my-5 bg-slate-900 text-white font-bold rounded-3xl'>Create your BitTree</button>\n            </div>\n          </div>\n        </div>\n      </div>\n      <div className=\"col2 w-full h-screen bg-[#E9C0E9]\">\n        <img className='h-full object-contain' src=\"/generate.png\" alt=\"Generate your links\" />\n        <ToastContainer />\n      </div>\n    </div>\n  )\n}\n\nexport default Generate"
  },
  {
    "path": "Video 137/linktree-clone/app/globals.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n"
  },
  {
    "path": "Video 137/linktree-clone/app/layout.js",
    "content": "import localFont from \"next/font/local\";\nimport \"./globals.css\";\nimport Navbar from \"@/components/Navbar\";\n\n\n\n\nconst geistSans = localFont({\n  src: \"./fonts/GeistVF.woff\",\n  variable: \"--font-geist-sans\",\n  weight: \"100 900\",\n});\nconst geistMono = localFont({\n  src: \"./fonts/GeistMonoVF.woff\",\n  variable: \"--font-geist-mono\",\n  weight: \"100 900\",\n});\n\nexport const metadata = {\n  title: \"BitTree - Your favorite link sharing site\",\n  description: \"We brought a revolution in link sharing\",\n};\n\nexport default function RootLayout({ children }) {\n\n\n\n\n\n  return (\n    <html lang=\"en\">\n      <body\n        className={`${geistSans.variable} ${geistMono.variable} antialiased`}\n      >\n        <Navbar/>\n        {children}\n      </body>\n    </html>\n  );\n}\n"
  },
  {
    "path": "Video 137/linktree-clone/app/page.js",
    "content": "\"use client\"\nimport Image from \"next/image\";\nimport { useState } from \"react\";\nimport { useRouter } from \"next/navigation\";\n\nexport default function Home() {\n\n  const router = useRouter()\n  const [text, setText] = useState(\"\")\n\n  \n  const createTree = () => { \n    \n    router.push(`/generate?handle=${text}`)\n  }\n  return (\n    <main>\n      <section className=\"bg-[#254f1a] min-h-[100vh] grid grid-cols-2\">\n    <div className=\"flex justify-center flex-col ml-[10vw] gap-3\">\n      <p className=\"text-yellow-300 font-bold text-7xl\">Everything you </p>\n      <p className=\"text-yellow-300 font-bold text-7xl\">are. In one,</p>\n      <p className=\"text-yellow-300 font-bold text-7xl\">simple link in bio.</p>\n      <p className=\"text-yellow-300 text-xl my-4\">Join 50M+ people using Linktree for their link in bio. One link to help you share everything you create, curate and sell from your Instagram, TikTok, Twitter, YouTube and other social media profiles.</p>\n      <div className=\"input flex gap-2\">\n        <input value={text} onChange={(e)=> setText(e.target.value)} className=\"px-2 py-2 focus:outline-green-800 rounded-md\" type=\"text\" placeholder=\"Enter your Handle\" />\n        <button onClick={()=> createTree()} className=\"bg-pink-300 rounded-full px-4 py-4 font-semibold\">Claim your Bittree</button>\n      </div>\n    </div>\n    <div className=\"flex items-center justify-center flex-col mr-[10vw]\">\n      <img src=\"/home.png\" alt=\"homepage image\" />\n\n    </div>\n      </section>\n      <section className=\"bg-red-700 min-h-[100vh]\">\n \n      </section>\n    </main>\n  );\n}\n"
  },
  {
    "path": "Video 137/linktree-clone/components/Navbar.js",
    "content": "\"use client\"\nimport React from 'react'\nimport Link from 'next/link'\nimport { usePathname } from \"next/navigation\";\n\nconst Navbar = () => {\n    const pathname = usePathname()\n    const showNavbar = [\"/\", \"/generate\"].includes(pathname)\n\n    return ( <>{showNavbar && <nav className='bg-white w-[80vw] flex justify-between fixed top-10 right-[10vw] rounded-full p-5 px-7'>\n            <div className=\"logo flex gap-20 items-center\">\n                <Link href={\"/\"}>\n                <svg className='h-8' viewBox=\"0 0 1176 238\" title=\"Linktree Logo\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 25.5326H33.7257V202.802H127.205V233.988H0V25.5326ZM160.564 25.5326C172.111 25.5326 181.642 34.469 181.642 45.9586C181.642 57.6307 172.111 66.9318 160.564 66.9318C148.833 66.9318 139.485 57.6307 139.485 45.9586C139.485 34.469 148.833 25.5326 160.564 25.5326ZM144.067 83.7103H176.51V233.988H144.067V83.7103ZM195.572 83.7103H228.015V104.501C237.546 88.6345 254.042 79.6981 275.854 79.6981C311.046 79.6981 333.041 107.054 333.041 150.46V233.988H300.598V153.378C300.598 125.292 288.318 109.425 265.956 109.425C241.579 109.425 228.015 126.021 228.015 156.113V233.988H195.572V83.7103ZM350.087 25.5326H382.53V157.39L443.016 83.8927H483.707L419.188 159.031L483.707 233.988H443.016L382.53 160.673V233.988H350.087V25.5326ZM496.354 45.4114H529.347V83.7103H567.838V110.519H529.347V187.847C529.347 197.695 535.395 203.713 544.743 203.713H566.372V233.988H540.344C512.117 233.988 496.354 217.392 496.354 187.847V45.4114ZM584.5 83.7103H614.577V102.313C622.642 88.0873 636.022 79.6981 652.519 79.6981C657.468 79.6981 660.217 79.8805 663.883 81.1571V111.249C661.683 110.702 658.384 110.155 651.786 110.155C627.958 110.155 614.761 130.034 614.761 164.503V233.988H582.318V83.7103H584.5ZM739.582 79.6981C775.324 79.6981 813.999 101.218 813.999 162.314V166.691H697.792C700.358 193.5 715.938 208.273 741.965 208.273C760.661 208.273 776.607 198.242 780.09 184.199H813.082C809.783 214.291 778.44 238 741.965 238C695.226 238 665.899 207.726 665.899 158.667C665.899 115.261 694.309 79.6981 739.582 79.6981ZM779.54 139.882C774.958 121.28 760.294 109.608 739.766 109.608C719.97 109.608 706.04 121.644 700.541 139.882H779.54ZM902.162 79.6981C937.904 79.6981 976.578 101.218 976.578 162.314V166.691H860.372C862.938 193.5 878.517 208.273 904.545 208.273C923.241 208.273 939.187 198.242 942.669 184.199H975.662C972.363 214.291 941.02 238 904.545 238C857.805 238 828.479 207.726 828.479 158.667C828.479 115.261 856.706 79.6981 902.162 79.6981ZM941.936 139.882C937.354 121.28 922.691 109.608 901.979 109.608C882.183 109.608 868.253 121.644 862.754 139.882H941.936ZM984.643 79.1509H1042.56L1001.32 40.1226L1024.05 16.9609L1063.28 57.0835V0H1097.37V57.0835L1136.59 16.9609L1159.32 40.1226L1118.08 79.1509H1176V111.431H1117.71L1159.14 151.554L1136.41 174.169L1080.14 117.815L1023.87 174.169L1001.14 151.554L1042.56 111.431H984.277V79.1509H984.643ZM1063.46 157.572H1097.55V234.17H1063.46V157.572Z\"></path></svg></Link>\n\n                <ul className='flex gap-10'>\n                    <Link href=\"/\"><li>Templates </li></Link>\n                    <Link href=\"/\"><li>Marketplace</li></Link>\n                    <Link href=\"/\"><li>Discover</li></Link>\n                    <Link href=\"/\"><li>Pricing</li></Link>\n                    <Link href=\"/\"><li>Learn</li></Link>\n                </ul>\n            </div>\n\n            <div className='flex gap-3'>\n                <button className=\"login bg-gray-400 p-4 rounded-lg font-bold\">Log in</button>\n                <button className=\"signup bg-gray-900 text-white font-bold p-4 rounded-full\"> Sign up free</button>\n            </div>\n        </nav>}\n        </>\n\n    )\n}\n\nexport default Navbar"
  },
  {
    "path": "Video 137/linktree-clone/jsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"paths\": {\n      \"@/*\": [\"./*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "Video 137/linktree-clone/lib/mongodb.js",
    "content": "// lib/mongodb.js\n\nimport { MongoClient } from 'mongodb'\n\nconst uri = process.env.MONGODB_URI\nconst options = { \n  useNewUrlParser: true,\n}\n\nlet client\nlet clientPromise\n\nif (!process.env.MONGODB_URI) {\n  throw new Error('Add Mongo URI to .env.local')\n}\n\nif (process.env.NODE_ENV === 'development') { \n  if (!global._mongoClientPromise) {\n    client = new MongoClient(uri, options)\n    global._mongoClientPromise = client.connect()\n  }\n  clientPromise = global._mongoClientPromise\n} else {\n  client = new MongoClient(uri, options)\n  clientPromise = client.connect()\n}\n\nexport default clientPromise\n"
  },
  {
    "path": "Video 137/linktree-clone/next.config.mjs",
    "content": "/** @type {import('next').NextConfig} */\nconst nextConfig = {};\n\nexport default nextConfig;\n"
  },
  {
    "path": "Video 137/linktree-clone/package.json",
    "content": "{\n  \"name\": \"linktree-clone\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"next dev --turbopack\",\n    \"build\": \"next build\",\n    \"start\": \"next start\",\n    \"lint\": \"next lint\"\n  },\n  \"dependencies\": {\n    \"mongodb\": \"^6.10.0\",\n    \"next\": \"15.0.2\",\n    \"react\": \"19.0.0-rc-02c0e824-20241028\",\n    \"react-dom\": \"19.0.0-rc-02c0e824-20241028\",\n    \"react-toastify\": \"^10.0.6\"\n  },\n  \"devDependencies\": {\n    \"eslint\": \"^8\",\n    \"eslint-config-next\": \"15.0.2\",\n    \"postcss\": \"^8\",\n    \"tailwindcss\": \"^3.4.1\"\n  }\n}\n"
  },
  {
    "path": "Video 137/linktree-clone/postcss.config.mjs",
    "content": "/** @type {import('postcss-load-config').Config} */\nconst config = {\n  plugins: {\n    tailwindcss: {},\n  },\n};\n\nexport default config;\n"
  },
  {
    "path": "Video 137/linktree-clone/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\n    \"./pages/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./components/**/*.{js,ts,jsx,tsx,mdx}\",\n    \"./app/**/*.{js,ts,jsx,tsx,mdx}\",\n  ],\n  theme: {\n    extend: {\n      colors: {\n        background: \"var(--background)\",\n        foreground: \"var(--foreground)\",\n      },\n    },\n  },\n  plugins: [],\n};\n"
  },
  {
    "path": "Video 14/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>CSS</title>\n    <style>\n        div, span {\n            color: red;\n            background-color: yellow;\n        }\n    </style>\n</head>\n<body>\n    <div>\n        Hey I am harry and today I am in CSS Mood\n    </div>\n\n    <div>\n        I am good\n    </div>\n    <span>\n        I am also good\n    </span>\n    <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Asperiores tempora possimus molestiae doloremque quod. Recusandae laborum, laudantium cupiditate magni nostrum sit repellat dolorum ipsa vero aspernatur saepe autem, quod obcaecati, maxime quaerat! Praesentium culpa ipsam quasi odio sapiente nam, animi velit corporis nostrum!</p>\n</body>\n</html>"
  },
  {
    "path": "Video 15/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n    <!-- <style>\n        h1{\n            background-color: red;\n            color: yellow;\n        }\n\n    </style> -->\n    <link rel=\"stylesheet\" href=\"style.css\">\n</head>\n<body>\n    <!-- <h1 style=\"color: yellow;background-color: red;\">Three ways to add CSS to HTML</h1> -->\n    <h1>Three ways to add CSS to HTML</h1>\n    <div>\n        <ol>\n            <li>Inline CSS</li>\n            <li>Internal CSS</li>\n            <li>External CSS</li>\n        </ol>\n    </div>\n    <p>Everyone is good in some way or the other. Does this even make any sense?</p>\n</body>\n</html>"
  },
  {
    "path": "Video 15/style.css",
    "content": "h1{\n    background-color: red;\n    color: yellow;\n}"
  },
  {
    "path": "Video 16/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n<body>\n    <h1>My Videos and Audios for the Day</h1>\n    <h2>Some Videos for the Day</h2>\n    <div>\n        <video width=\"239\" src=\"1.mp4\" controls></video>\n        <video width=\"239\" src=\"2.mp4\" controls></video>\n        <video width=\"239\" src=\"3.mp4\" controls></video>\n        <video width=\"239\" src=\"4.mp4\" controls></video>\n        <video width=\"239\" src=\"5.mp4\" controls></video>\n    </div>\n    <h2>Some Audios for the Day</h2>\n    <div>\n        <audio src=\"1.mp3\" controls></audio>\n        <audio src=\"2.mp3\" controls></audio>\n        <audio src=\"3.mp3\" controls></audio>\n        <audio src=\"4.mp3\" controls></audio>\n        <audio src=\"5.mp3\" controls></audio>\n    </div>\n</body>\n</html>"
  },
  {
    "path": "Video 17/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>CSS Selectors</title>\n    <style>\n        /* Element Selector  */\n        div{\n            /* background-color: red; */\n        }\n\n        /* Class Selector  */\n        .red{\n            background-color: red;\n        }\n\n        /* Id Selector */\n        #green{\n            background-color: green;\n        }\n\n        /* Child Selectors  */\n        div > p {\n            color: blue;\n            background-color: brown;\n        }\n\n        /* Descendant Selector  */\n        div p {\n            color: blue;\n            background-color: brown;\n        }\n\n        /* Universal Selector */\n        * {\n            margin:0;\n            padding: 0;\n        }\n\n        /* Pseudo Selector  */\n        a:visited{\n            color: yellow\n        }\n\n        a:link {\n            color: green;\n        }\n\n        a:active{\n            background-color: red;\n        }\n\n        a:hover{\n            background-color: yellow;\n        }\n\n\n        p:first-child{\n            background-color: aqua;\n        }\n\n    </style>\n</head>\n<body>\n    <main class=\"one\">\n        <p>I am first</p>\n        <p>I am second</p>\n    </main>\n    <div class=\"red\">\n        I am a div\n        <article>\n\n            <p>I am a para inside div</p>\n        </article>\n    </div>\n\n    <div id=\"green\">\n        I am another div\n    </div>\n    <a href=\"https://www.google.com\">Go to Google</a>\n    <a href=\"https://www.facebook2.com\">Go to Facebook</a>\n</body>\n</html>"
  },
  {
    "path": "Video 18/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>CSS Boxmodel</title>\n    <style>\n        *{\n            margin: 0;\n            padding: 0;\n        }\n\n        .box {\n            background-color: aqua;\n        }\n        .box1{\n            color: yellow;\n            padding: 10px;\n            margin:35px;\n            border: 2px solid blue;\n            height: 200px;\n            box-sizing: border-box;\n        }\n        .box2{\n            color:red;\n            padding: 10px;\n            margin:25px;\n            border: 2px solid black;\n            height: 200px;\n            box-sizing: border-box;\n        }\n    </style>\n</head>\n\n<body>\n    <div class=\"box box1\">I am a box</div>\n    <div class=\"box box2\">I am another box</div>\n</body>\n\n</html>"
  },
  {
    "path": "Video 19/colors.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Colors</title>\n    <style>\n        /* https://codepen.io/web-dot-dev/pen/ZELGraM */\n        h1 {\n            /* color:darkred; */\n            /* color: #0BEE0B; */\n            /* color: rgb(76, 125, 59); */\n            /* color: rgba(255, 22, 5, 0.175) */\n            color: hsl(130, 61%, 44%);\n            background-color: rgb(76, 125, 59);\n        }\n    </style>\n</head>\n\n<body>\n    <h1>Lets learn about colors</h1>\n    <p>\n        Color can be represented in:\n        <ol>\n            <li>Color Keywords</li>\n            <li>Hex Color Code</li>\n            <li>RGB</li>\n            <li>RGBA</li>\n            <li>HSL</li>\n        </ol>\n    </p>\n</body>\n\n</html>"
  },
  {
    "path": "Video 19/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Fonts</title> \n    <style>\n        @import url('https://fonts.googleapis.com/css2?family=Baloo+Bhai+2&family=Poppins:wght@300&display=swap');\n        h1 {\n            font-family: 'Poppins', 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif\n        }\n\n        p {\n            /* font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; */\n            font-family: 'Baloo Bhai 2', sans-serif;\n            font-size: 20px; \n            /* font-style:italic;\n            font-weight: 500;  */\n            \n        }\n        h2{\n            text-align: center;\n            text-transform: uppercase;\n            text-decoration: underline;\n            text-decoration-color: blue;\n            /* text-decoration-style: dotted; */\n            text-decoration-thickness: 7px ;\n            /* text-indent: 45px; */\n        }\n        .lorem{\n            border: 2px solid red;\n            width: 145px;\n            word-break: break-all;\n            /* text-overflow: ellipsis;\n            overflow: hidden; */\n\n        }\n    </style>\n</head>\n\n<body>\n    <div>\n        <!-- https://codepen.io/web-dot-dev/pen/yLojraG -->\n        <h1>Fonts</h1>\n        <h2>about Fonts</h2>\n        <p>This is a video on fonts</p>\n        <p class=\"lorem\">Lorem ipsum dolor sit amet consectetur adipisicing elit. Quos sequi accusamus quas itaque molestias dolorem quisquam quod, adipisci maxime dolore, mollitia illo officia deserunt voluptatem iure qui. Fugit aliquam possimus aperiam commodi eum amet veniam at vel. Necessitatibus asperiores eos amet laborum dolor, ipsum porro!</p>\n    </div>\n</body>\n\n</html>"
  },
  {
    "path": "Video 20/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n<body>\n    <!-- Write html and css code to style a paragraph inside a div which contains 5 other paragraphs. The first paragraph must have background color yellow and text color red. The other paragraphs must have background color blue and text color white. The HMTL is written below for your reference. Do not change this html -->\n    <div>\n        <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Expedita explicabo consectetur dicta fuga ea at vitae suscipit, repellendus illum deleniti laboriosam ipsa distinctio.</p>\n        <p>I am another para</p>\n        <p>I am also another para</p>\n    </div>\n    <div>\n        <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Expedita explicabo consectetur dicta fuga ea at vitae suscipit, repellendus illum deleniti laboriosam ipsa distinctio.</p>\n        <p>I am another para</p>\n        <p>I am also another para</p>\n    </div>\n</body>\n</html>"
  },
  {
    "path": "Video 21/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n    <style>\n        /* The specificity of this selector is 1  */\n        h1 {\n            color: aqua;\n        }\n\n        /* The specificity of this selector is 10  */\n        .cpurple {\n            color: purple;\n        }\n\n        /* The specificity of this selector is 1 + 10 = 11  */\n        h1.yellow {\n            color: yellow;\n        }\n\n        /* This is an example of attribute selector. The specificity of this selector is 10 */\n        [data-x=a] {\n            color: maroon;\n        }\n\n        /* The specificity of this selector is 10  */\n        .cred {\n            color: red;\n        }\n\n        /* The specificity of this selector is 1 + 10 + 10 + 10 + 10 = 41  */\n        a.harryclass.rohan-class[href]:hover {\n            color: blueviolet;\n        }\n    </style>\n</head>\n\n<body>\n    <div>\n        <h1 class=\"yellow cred cpurple\" data-x=\"a\">CSS Specificity</h1>\n    </div>\n</body>\n\n</html>"
  },
  {
    "path": "Video 22/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n    <style>\n        * {\n            margin: 0;\n            padding: 0;\n        }\n\n        html{\n            font-size: 12px;\n        }\n\n        .box {\n            box-sizing: border-box;\n            border: 2px solid black;\n            /* width: 2048px; */\n            width: 80vw;\n            height: 10vh;\n            margin: auto;\n            background-color: aquamarine;\n        }\n\n        .container {\n            box-sizing: border-box;\n            border: 2px solid black;\n            /* width: 2048px; */\n            width: 80vw;\n            /* height: 80vh; */\n            min-height: 80vh;\n            margin: 23px auto;\n            font-size: 18px;\n            background-color: aquamarine;\n        }\n        .container > div{\n            font-size: 2em; \n            border: 2px solid red;\n            width: 50%;\n        }\n\n        .container > div > div{\n            border: 2px solid blue;\n            width: 50%;\n        }\n\n        .mycont{ \n            border: 2px solid black;\n            box-sizing: border-box;\n            margin: 23px auto;\n            color: rgb(0, 0, 0);\n            font-size: 22px;\n            /* width: 100vmin; */\n            width: 80vw;\n        }\n    </style>\n</head>\n\n<body>\n    <!-- https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Values_and_Units -->\n    <div class=\"box\">\n        This is a box\n    </div>\n\n    <div class=\"container\">\n        <div>\n            Lorem ipsum, dolor sit amet consectetur adipisicing elit. Perferendis necessitatibus quia quod iste dolorem\n            voluptatem fuga quidem aspernatur. Nihil ipsa sint quae, beatae explicabo saepe impedit laboriosam magni\n            cupiditate expedita voluptates consequatur odit veritatis dolorum doloribus. Iure nemo odit dicta, delectus,\n            modi reiciendis maiores ut quo adipisci libero quam laboriosam nihil voluptate natus nobis earum ad?\n        \n        <div>\n            Lorem ipsum dolor sit amet, consectetur adipisicing elit. Libero omnis voluptas est aliquam, dolores rem laudantium nulla maiores odio fugit, totam voluptatem saepe!\n        </div>\n    </div>\n\n        <!-- Expand this to see that this container will adjust its height lorem999 -->\n    </div>\n\n    <div class=\"mycont\">\n        I am another container\n    </div>\n</body>\n\n</html>"
  },
  {
    "path": "Video 23/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>CSS Display Property</title>\n    <style>\n        *{\n            margin: 0;\n            padding: 0;\n        }\n        .box {\n            border: 2px solid blue;\n            display: inline-block;\n            width: 344px;\n            padding:45px;\n            margin: 34px; \n        }\n\n        .box1{\n            /* display: none; */\n            /* visibility: hidden; */\n        }\n    </style>\n</head>\n\n<body>\n    <!-- https://developer.mozilla.org/en-US/docs/Web/CSS/display -->\n    <div class=\"box box1\">\n        I am a box\n    </div>\n    <div class=\"box\">also a nice box</div>\n\n    <span>I am a good</span>\n    <span>boy</span>\n</body>\n\n</html>"
  },
  {
    "path": "Video 24/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n    <style>\n        .box{\n            border: 2px solid black;\n            padding:34px;\n            box-shadow:  5px 15px 5px #70a711;\n        }\n        .text-element { text-shadow: 10px 5px 3px #e695f7 }\n    </style>\n</head>\n<body>\n    <div class=\"box\">\n        I am a box\n    </div>\n\n    <p class=\"text-element\">\n        Lorem ipsum dolor sit amet consectetur adipisicing elit. Architecto, atque. Modi voluptatibus necessitatibus architecto quidem sit maiores, ad nesciunt et odit esse. Possimus, ipsam et molestiae eius quae nisi quisquam maiores fugiat aut fuga!\n    </p>\n    \n</body>\n</html>"
  },
  {
    "path": "Video 25/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>CSS Lists</title>\n    <style>\n        nav ul li{\n            list-style: devanagari;\n            list-style-type: \"🔥\";\n            /* background-color: yellow; */\n            /* list-style-position: inside; */\n            border: 2px solid black;\n            /* list-style: disc inside url(\"https://user-images.githubusercontent.com/14011726/94132137-7d4fc100-fe7c-11ea-8512-69f90cb65e48.gif\"); */\n            /* list-style-image: url(\"https://user-images.githubusercontent.com/14011726/94132137-7d4fc100-fe7c-11ea-8512-69f90cb65e48.gif\"); */\n        }\n \n    </style>\n</head>\n<body>\n    <nav>\n        <ul>\n            <li>Home</li>\n            <li>About</li>\n            <li>Contact</li>\n        </ul>\n    </nav>\n</body>\n</html>"
  },
  {
    "path": "Video 26/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Overflow</title>\n    <style>\n        .box {\n            width: 30vw;\n            height: 30vh;\n            border: 2px solid black;\n            /* overflow: auto;\n            overflow-x: hidden;\n            overflow-y: scroll; */\n            overflow: auto hidden;\n            /* white-space: nowrap;\n            text-overflow: ellipsis; */\n        }\n    </style>\n</head>\n\n<body>\n    <div class=\"box\">\n        I am a good boy and I love to write Lorem ipsum dolor, sit amet consectetur adipisicing elit. Dicta iure amet\n        unde voluptas nihil vero, maxime esse quis quos natus rem, earum aspernatur quasi aut ea commodi nostrum\n        voluptate! Sint rerum nostrum perferendis sapiente explicabo perspiciatis, ut magni? Aspernatur, provident\n        dolorum unde corporis doloribus rem!\n    </div>\n</body>\n\n</html>"
  },
  {
    "path": "Video 27/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n    <style>\n        /* p{\n            background-color: blue;\n            color: white;\n        }\n\n        div p:first-child{ \n            background-color: yellow;\n            color: red;\n        } */\n\n       \n    </style>\n</head>\n<body>\n    <!-- Write html and css code to style a paragraph inside a div which contains 5 other paragraphs. The first paragraph must have background color yellow and text color red. The other paragraphs must have background color blue and text color white. The HMTL is written below for your reference. Do not change this html -->\n    <div>\n        <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Expedita explicabo consectetur dicta fuga ea at vitae suscipit, repellendus illum deleniti laboriosam ipsa distinctio.</p>\n        <p>I am another para</p>\n        <p>I am also another para</p>\n    </div>\n    <div>\n        <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Expedita explicabo consectetur dicta fuga ea at vitae suscipit, repellendus illum deleniti laboriosam ipsa distinctio.</p>\n        <p>I am another para</p>\n        <p>I am also another para</p>\n    </div>\n</body>\n</html>"
  },
  {
    "path": "Video 28/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>CSS Position</title>\n    <style>\n        * {\n            margin: 0;\n            padding: 0;\n        }\n\n        .box {\n            height: 433px;\n            width: 80vw;\n            padding: 3px;\n            margin: 3px;\n            border: 2px solid black;\n        }\n\n        .box1 {\n            background-color: aqua;\n            /* position: sticky;\n            top:0px;\n            height: 111px;\n            width:100%;\n            margin: 0;\n            padding: 0; */\n            position: absolute;\n            top: 0px;\n            left:3px;\n        }\n\n        .box2 {\n            background-color: azure;\n            /* position: relative;\n            top: 34px;\n            left: 56px; */\n        }\n\n        .box3 {\n            background-color: antiquewhite;\n            /* position: fixed;\n            bottom: 0px;\n            left:8vw;\n            height: 111px; */\n        }\n\n        .box4 {\n            background-color: purple;\n        }\n\n      \n\n        .parent {\n            padding: 43px;\n            margin: 34px;\n            border: 3px solid purple;\n            /* position: relative; */\n\n\n            /* Exception: transform, filter, or perspective properties can also make an element appear as positioned */\n            /* transform: translate(0); */\n            /* filter: invert(0); */\n            /* perspective: 0em; */\n        }\n    </style>\n</head>\n\n<body>\n    <div class=\"parent\">\n        <div class=\"box box1\"></div>\n        <div class=\"box box2\"></div>\n        <div class=\"box box3\"></div>\n        <div class=\"box box4\"></div>\n    </div>\n</body>\n\n</html>"
  },
  {
    "path": "Video 29/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n<body>\n    <!-- card.png is a file which contains a card Image. Write html and css code to design this card. Use #html -->\n</body>\n</html>"
  },
  {
    "path": "Video 30/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Css Variables</title>\n    <style>\n\n        :root{\n            --color: rgb(255, 0, 247);\n            --seccolor: rgb(231, 164, 246); \n            --defpad: 23px;\n            --defop: 0.4;\n        }\n\n        *{\n            margin: 0;\n            padding: 0;\n        }\n       .nav{\n            background-color: var(--color);\n        }\n\n        ul{\n            display: flex;\n        }\n\n        ul li{\n            opacity: var(--defop);\n            list-style: none;\n            padding: var(--defpad);\n            border: 2px solid var(--seccolor);\n        }\n\n        ul li:first-child{\n            --color: rgb(243, 87, 8);\n            background-color: var(--color, blue);\n        }\n\n        .container{\n            background-color: var(--seccolor);\n        }\n\n    </style>\n</head>\n<body>\n    <div class=\"nav\">\n        <ul>\n            <li>Home</li>\n            <li>About </li>\n            <li>Contact</li>\n        </ul>\n    </div>\n    \n\n    <div class=\"container\">\n        Lorem ipsum, dolor sit amet consectetur adipisicing elit. Esse assumenda qui ad dolorem consequuntur facilis aliquam. Unde sapiente ipsam quaerat, at debitis nesciunt, totam nulla quae ad ipsum veniam sed eligendi rem deserunt quos maiores modi. Illo eaque expedita natus iusto nostrum dolorem quos est.\n    </div>\n</body>\n</html>"
  },
  {
    "path": "Video 31/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>CSS media query</title>\n    <style>\n        body {\n            background-color: red;\n        }\n\n        @media screen and (orientation: portrait) {\n            body{\n                border: 2px solid purple;\n            }\n        }\n\n        @media only screen and (max-width: 455px){\n            body{\n\n                background-color: blue;\n            }\n            \n            .boxes{\n                flex-direction: column;\n            }\n        }\n        \n        /* @media not|only mediatype and (expressions) {\n            CSS-Code;\n        } */\n\n        .boxes{\n            display: flex;\n        }\n\n        .box{\n            width: 344px;\n            height: 344px;\n            background-color: steelblue;\n            padding: 3px;\n            margin: 3px;\n        }\n\n    </style>\n</head>\n\n<body>\n    <div>\n        Hey I am a red body guy!\n    </div>\n\n    <div class=\"boxes\">\n        <div class=\"box\"></div>\n        <div class=\"box\"></div>\n        <div class=\"box\"></div>\n    </div>\n</body>\n\n</html>"
  },
  {
    "path": "Video 32/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>CSS Card Design</title>\n    <style>\n        @import url('https://fonts.googleapis.com/css2?family=Baloo+Bhai+2&family=Poppins:wght@300&display=swap');\n        *{\n            margin: 0;\n            padding: 0;\n        }\n        body{\n            background-color: gray;\n            padding: 45px;\n            display: flex;\n        }\n        .card{\n            background-color: white;\n            width: 198px; \n            border-radius: 7px;\n            padding: 0 0 34px 0;\n            margin: 4px;\n        }\n        \n        .image{\n            padding: 5px;\n        }\n        .image img{\n            border-radius: 7px;\n        }\n        .content{\n            padding: 7px 13px; \nfont-family: 'Poppins', sans-serif;\n        }\n       \n        .content p{\n            font-size: 9px;\n            color: gray;\n        }\n        .capsules{\n            padding: 0 28px 0 14px;\n        }\n        .capsules span{\n            border: 1px solid gray;\n            padding: 0px 6px;\n            border-radius: 7px;\n            font-size: 8px;\n            font-family: 'Baloo Bhai 2', sans-serif; \n\n        }\n        .button{\n            text-align: center;\n        }\n        .button button{\n            padding: 7px 15px;\n            border-radius: 15px;\n            background-color: rgb(216, 236, 253);\n            color: rgb(14, 150, 234);\n            font-size: 10px;\n            margin-top: 7px;\n            border: none;\n            font-weight: bold;\n            cursor: pointer;\n        }\n\n        .button button:hover{\n            background-color: rgb(194, 225, 246);\n            color: rgb(10, 136, 214);\n        }\n    </style>\n</head>\n<body>\n    <div class=\"card\"> \n        <div class=\"image\">\n            <img width=\"188\" src=\"https://images.pexels.com/photos/3880179/pexels-photo-3880179.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1\" alt=\"\">\n        </div>\n\n        <div class=\"capsules\">\n            <span>Nature</span>\n            <span>Lake</span>\n        </div>\n        <div class=\"content\">\n            <h2>Harry</h2>\n            <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Quas nemo numquam vel cumque ullam alias sequi suscipit velit! Enim cumque aperiam tempore tenetur?</p>\n        </div>\n        <div class=\"button\">\n            <button>Read More</button>\n        </div>\n\n    </div>\n\n    <div class=\"card\"> \n        <div class=\"image\">\n            <img width=\"188\" src=\"https://images.pexels.com/photos/3880179/pexels-photo-3880179.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1\" alt=\"\">\n        </div>\n\n        <div class=\"capsules\">\n            <span>Nature</span>\n            <span>Lake</span>\n        </div>\n        <div class=\"content\">\n            <h2>Harry</h2>\n            <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Quas nemo numquam vel cumque ullam alias sequi suscipit velit! Enim cumque aperiam tempore tenetur?</p>\n        </div>\n        <div class=\"button\">\n            <button>Read More</button>\n        </div>\n\n    </div>\n\n    <div class=\"card\"> \n        <div class=\"image\">\n            <img width=\"188\" src=\"https://images.pexels.com/photos/3880179/pexels-photo-3880179.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1\" alt=\"\">\n        </div>\n\n        <div class=\"capsules\">\n            <span>Nature</span>\n            <span>Lake</span>\n        </div>\n        <div class=\"content\">\n            <h2>Harry</h2>\n            <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Quas nemo numquam vel cumque ullam alias sequi suscipit velit! Enim cumque aperiam tempore tenetur?</p>\n        </div>\n        <div class=\"button\">\n            <button>Read More</button>\n        </div>\n\n    </div>\n</body>\n</html>"
  },
  {
    "path": "Video 33/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n<body>\n    Create a multicolor website which can change color using CSS Variables\n</body>\n</html>"
  },
  {
    "path": "Video 34/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>CSS Float & Clear</title>\n    <style>\n        .cards{\n            border: 2px solid black;\n            display: flow-root;\n        }\n        \n        img{\n            float:left;\n        }\n\n        .card{\n            border: 2px solid red;\n        }\n\n        .card:nth-child(3){\n            background-color: aqua;\n            clear:both;\n        }\n    </style>\n</head>\n<body>\n    <div class=\"cards\">\n        <img src=\"https://media.istockphoto.com/id/928826678/photo/two-men-relaxing-and-fishing.jpg?s=2048x2048&w=is&k=20&c=fSG5LG9kxLNzjG9_YI1bXdz3-gD7UW2e2bd9arD5Vm8=\" alt=\"\" width=\"230\">\n        <div class=\"card\">\n            <p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Commodi fugiat ab tenetur praesentium sequi, nisi nesciunt officiis magnam ut at voluptatibus sapiente ducimus deleniti esse alias nihil. Soluta iure ipsum voluptatibus assumenda ratione ut?</p>\n        </div>\n        <div class=\"card\">Lorem ipsum dolor sit, amet consectetur adipisicing elit. Inventore explicabo dignissimos a et sapiente sunt assumenda cupiditate veniam cumque ipsa? Autem quod, id itaque velit cupiditate ea quia sit laudantium asperiores. Culpa fuga libero odio consequatur et totam ratione tempore eos ipsum, soluta omnis, fugiat facere? Quam neque a pariatur debitis quos vero maiores, porro, voluptatum earum corporis deserunt dolore ipsa! Explicabo ea ipsum possimus fugiat accusantium, incidunt ducimus. Assumenda nulla beatae dolores, recusandae voluptates non dolorem ut, obcaecati minus ducimus officiis in impedit. Quas cupiditate totam quis. Tempora praesentium similique cumque dolores ipsa commodi nobis itaque vero, est fugiat, accusantium maiores quos beatae quaerat quibusdam officia corrupti. Quaerat eaque magni error fugit nihil. Asperiores libero minus velit assumenda quo repellendus doloribus officia unde facere commodi a ab porro, repudiandae quidem! Officia, earum. Aliquam, id? Praesentium temporibus distinctio architecto asperiores consequatur provident reiciendis corrupti, nostrum nam hic voluptatem minima. Cum assumenda iste iusto. Adipisci quaerat labore suscipit minus libero ratione quidem recusandae neque. Eveniet amet animi quas quod facilis dicta, fugiat praesentium laborum, a delectus culpa cumque. Fugiat alias suscipit nostrum repellat nesciunt repudiandae enim provident iste a quo? Facere reiciendis ut illo quis blanditiis ipsa tempora, eos cupiditate corrupti ex alias laboriosam velit impedit eveniet asperiores sunt aperiam maxime earum explicabo? Modi cupiditate voluptatibus perspiciatis consequuntur quis, aut commodi, error libero, expedita debitis accusamus rem illo mollitia! Natus, repellat velit enim quaerat eius voluptate odio adipisci fuga accusantium officiis quidem perferendis qui fugiat amet! Nulla quisquam praesentium omnis excepturi officiis, quasi similique vero, unde, quos quo aperiam numquam! Dolorem, ea. Dignissimos blanditiis, quia quibusdam deserunt doloribus tempora perferendis pariatur dolore itaque voluptates mollitia fugiat deleniti tempore commodi. Doloribus facilis molestiae repellat possimus eligendi voluptatibus hic quos maiores architecto magni enim fugit, reiciendis, adipisci esse, illo exercitationem assumenda id? Laboriosam, temporibus odit? Facere ratione repellendus laudantium laborum incidunt voluptatibus explicabo deleniti iusto dolorum nisi dicta fugiat saepe qui molestias commodi non dolor aperiam unde provident optio, enim omnis quidem. Nulla molestias officia numquam.</div>\n        <div class=\"card\">Card 3</div>\n    </div>\n</body>\n</html>"
  },
  {
    "path": "Video 35/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>More on CSS Selectors</title>\n    <style>\n        /* .box:first-child{\n            background-color: red;\n        } */\n\n        /* .box::first-line{\n            color: yellow;\n        } */\n\n        /* .boxes *{\n            color: blue;\n            border: 2px solid black;\n        }\n\n        p, a, .box, [data-color=\"primary\"]{\n            padding-top: 45px;\n        } */\n\n        /* .box:nth-child(odd){\n            background-color: blue;\n        } */\n\n        /* .box:nth-last-child(2){\n            background-color: red;\n        } */\n\n        .boxes::before {\n            content: \"Harry is good\";\n            color: blue;\n        }\n\n        .boxes::after {\n            content: \"Sigma course is also good\";\n            color: red;\n        }\n\n        ::selection {\n            background-color: black;\n            color: aqua;\n        }\n\n        .box::first-letter {\n            color: peru;\n            font-size: 45px;\n        }\n\n        input::placeholder {\n            color: rgb(84, 84, 88);\n        }\n    </style>\n</head>\n\n<body>\n    <div class=\"boxes\">\n        <div data-color=\"primary\" class=\"box\">I am first box</div>\n        <div class=\"box\">Hey I am a box</div>\n        <div class=\"box\">Hey I am a box</div>\n        <input type=\"text\" placeholder=\"Type your name here\">\n    </div>\n</body>\n\n</html>"
  },
  {
    "path": "Video 36/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>CSS MultiColor Website</title>\n    <style>\n        @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300&display=swap');\n    </style>\n    <style>\n\n        /* :root{\n            --primary-color: #ad5afacc;\n            --text-color: white;\n            --secondary-color: #e3cff5cc;\n        } */\n\n        :root{\n            --primary-color: #061872cc;\n            --text-color: white;\n            --secondary-color: #6ea5fccc;\n        }\n        \n        body{\n            background-color: var(--secondary-color);\n        }\n        * {\n            margin: 0;\n            padding: 0;\n            font-family: 'Poppins', sans-serif;\n        }\n\n        nav {\n            background-color: var(--primary-color);\n            padding: 12px 0;\n        }\n\n        ul li{\n            list-style: none;\n            display: inline;\n            padding: 23px;\n            font-weight: bolder;\n            \n        }\n\n        ul li a{\n            color: var(--text-color);\n            text-decoration: none;\n        }\n    </style>\n</head>\n\n<body>\n    <header>\n        <nav>\n            <ul>\n                <li><a href=\"/\">Home</a></li>\n                <li><a href=\"/\">About</a></li>\n                <li><a href=\"/\">Services</a></li>\n                <li><a href=\"/\">Contact Us</a></li>\n            </ul>\n        </nav>\n    </header>\n</body>\n\n</html>"
  },
  {
    "path": "Video 38/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>CSS Flexbox</title>\n    <style>\n        .container {\n            border: 2px solid red;\n            display: flex;\n            height: 80vh;\n            /* justify-content: center; */\n            align-items: center;\n            /* flex-direction: column; */\n            flex-wrap: wrap;\n            /* align-content: flex-start; */\n            /* there is no justify-items  in flexbox; */\n            flex-flow: row wrap;\n            /* gap: 30px; \n            row-gap: 40px;\n            column-gap: 10px; */\n            gap: 40px 10px;\n\n        }\n\n        .item {  \n            /* flex-grow: 1; */\n            height: 92px;\n            width: 92px;\n            border: 2px solid black;\n            /* margin: 4px; */\n            background-color: blueviolet;\n        }\n\n        .order-1{\n            order: 1;\n        }\n        .order-2{\n            order: 2;\n        }\n        .order-3{\n            order: 3;\n        }\n\n        .item1{  \n            /* flex-grow: 2; */\n            /* flex-shrink: 2; */\n            align-self: flex-end;\n        }\n    </style>\n</head>\n\n<body>\n\n    <main>\n        <div class=\"container\">\n            <div class=\"item item1\">1</div>\n            <div class=\"item\">2</div>\n            <div class=\"item\">3</div>\n            <div class=\"item order-1\">4</div>\n            <div class=\"item\"></div>\n            <div class=\"item\"></div>\n            <div class=\"item\"></div>\n            <div class=\"item\"></div>\n            <div class=\"item\"></div>\n            <div class=\"item\"></div>\n            <div class=\"item\"></div>\n            \n         \n        </div>\n    </main>\n\n</body>\n\n</html>"
  },
  {
    "path": "Video 39/grid-1.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>CSS Grid</title>\n    <style>\n        .container {\n            width: 80vw;\n            height: 100vh;\n            border: 2px solid black;\n            display: grid;\n            /* grid-template-columns: [pehla] 120px [doosra] 100px [t]; */\n            /* grid-template-rows: 100px 100px 100px; */\n            /* grid-template-columns: repeat(4, minmax(100px, 1fr)); */\n            grid-template-columns: repeat(4, 80px);\n            grid-template-rows: repeat(2, 80px);\n            /* gap: 34px; */\n            row-gap: 10px;\n            column-gap: 44px;\n            justify-items: center;\n            align-items: center;\n        }\n\n        .item {\n            border: 2px solid red;\n            height: 55px;\n            width: 55px;\n        }\n\n        .item-4 {\n            /* grid-row: 1/2;\n            grid-column: pehla/t; */\n        }\n\n        .item-1 {\n            /* grid-row: 1/2; */\n            /* or you can do  */\n            /* grid-row-start: 1;\n            grid-row-end: 2; */\n\n            /* same thing */\n            /* grid-column: 1/2; */\n        }\n    </style>\n</head>\n\n<body>\n    <div class=\"container\">\n        <div class=\"item item-1\">1</div>\n        <div class=\"item\">2</div>\n        <div class=\"item\">3</div>\n        <div class=\"item item-4\">4</div>\n        <div class=\"item\">5</div>\n    </div>\n</body>\n\n</html>"
  },
  {
    "path": "Video 39/grid-2.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>CSS Grid</title>\n    <style>\n        .container {\n            border: 2px solid black;\n            display: grid;\n            grid-template-areas: \"nav nav nav\"\n                \"side article article\"\n                \"footer footer footer\";\n        }\n\n        .item {\n            border: 2px solid red;\n            height: 55px;\n        }\n\n        .item-1 {\n            grid-area: nav;\n            background-color: aqua;\n        }\n\n        .item-2 {\n            grid-area: side;\n            background-color: beige;\n        }\n\n        .item-3 {\n            grid-area: article;\n            background-color: azure;\n        }\n\n        .item-4 {\n            grid-area: footer;\n        }\n\n        .item-5 {\n            grid-area: nav;\n        }\n    </style>\n</head>\n\n<body>\n    <div class=\"container\">\n        <div class=\"item item-1\">1</div>\n        <div class=\"item item-2\">2</div>\n        <div class=\"item item-3\">3</div>\n        <div class=\"item item-4\">4</div>\n        <div class=\"item item-5\">5</div>\n    </div>\n</body>\n\n</html>"
  },
  {
    "path": "Video 40/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Layout</title>\n    <style>\n        * {\n            margin: 0;\n            padding: 0;\n        }\n\n        header {\n            position: sticky;\n            top: 0;\n        }\n\n        nav {\n            background-color: pink;\n            height: 83px;\n        }\n\n        main {\n            background-color: black;\n            color: white;\n            padding: 34px;\n        }\n\n        .container {\n            background-color: green;\n            margin: 12px 34px;\n            padding: 55px 23px;\n            text-align: center;\n        }\n\n        .box1 {\n            background-color: palevioletred;\n            height: 70vh;\n            width: 45%;\n            display: inline-block;\n            margin: 0 12px;\n        }\n\n        .box2 {\n            background-color: blue;\n            height: 70vh;\n            width: 45%;\n            display: inline-block;\n            margin: 0 12px;\n        }\n\n        .text-box {\n            padding: 34px;\n            border: 2px solid white;\n            margin: 50px 34vw;\n            font-size: 2em;\n            border-radius: 13px;\n\n        }\n\n        .orange-box {\n            height: 32px;\n            width: 32px;\n            background: orange;\n            position: fixed;\n            bottom: 12px;\n            right: 23px;\n            border-radius: 60px;\n        }\n\n        footer {\n            height: 100px;\n            background-color: bisque;\n        }\n    </style>\n</head>\n\n<body>\n    <header>\n        <nav>\n\n        </nav>\n    </header>\n\n    <main>\n        <div class=\"container\">\n            <div class=\"box1\"></div>\n            <div class=\"box2\"></div>\n        </div>\n\n        <div class=\"text-box\">\n            <p>Welcome to Sigma Web Development Express</p>\n        </div>\n\n        <div class=\"orange-box\">\n\n        </div>\n    </main>\n\n    <footer>\n\n    </footer>\n</body>\n\n</html>"
  },
  {
    "path": "Video 41/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n\n<body>\n    <!-- Design this website's Navbar Using Flexbox -->\n</body>\n\n</html>"
  },
  {
    "path": "Video 42/Demo.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>CSS Transform by CodeWithHarry</title>\n  <link rel=\"stylesheet\" href=\"style.css\">\n</head>\n\n<body>\n\n\n\n  <div class=\"wrap\">\n    <!-- scaleX: Scales the element on the X-axis. -->\n    <div class=\"box\">\n      <div class=\"blue scaleX\">\n        scaleX\n      </div>\n    </div>\n    <!-- scaleY: Scales the element on the Y-axis. -->\n    <div class=\"box\">\n      <div class=\"blue scaleY\">\n        scaleY\n      </div>\n    </div>\n    <!-- scale: Scales the element on both the X-axis and Y-axis. -->\n    <div class=\"box\">\n      <div class=\"blue scale\">\n        scale\n      </div>\n    </div>\n    <!-- translateX: Moves the element along the X-axis. -->\n    <div class=\"box\">\n      <div class=\"blue translateX\">\n        translateX\n      </div>\n    </div>\n    <!-- translateY: Moves the element along the Y-axis. -->\n    <div class=\"box\">\n      <div class=\"blue translateY\">\n        translateY\n      </div>\n    </div>\n    <!-- translate: Moves the element along both the X-axis and Y-axis. -->\n    <div class=\"box\">\n      <div class=\"blue translate\">\n        translate\n      </div>\n    </div>\n    <!-- matrix: A 2D transformation method using a matrix of six values. -->\n    <div class=\"box\">\n      <div class=\"blue matrix\">\n        matrix\n      </div>\n    </div>\n    <!-- rotate: Rotates the element around the Z-axis. -->\n    <div class=\"box\">\n      <div class=\"blue rotate\">\n        rotate\n      </div>\n    </div>\n    <!-- skew: Skews the element on the X-axis and Y-axis. -->\n    <div class=\"box\">\n      <div class=\"blue skew\">\n        skew\n      </div>\n    </div>\n    <!-- skewX: Skews the element on the X-axis. -->\n    <div class=\"box\">\n      <div class=\"blue skewX\">\n        skewX\n      </div>\n    </div>\n    <!-- skewY: Skews the element on the Y-axis. -->\n    <div class=\"box\">\n      <div class=\"blue skewY\">\n        skewY\n      </div>\n    </div>\n    <!-- matrix3d: A 3D transformation method using a matrix of 16 values. -->\n    <div class=\"box\">\n      <div class=\"blue matrix3d\">\n        matrix3d\n      </div>\n    </div>\n    <!-- translate3d: Moves the element along the X-axis, Y-axis, and Z-axis. -->\n    <div class=\"box\">\n      <div class=\"blue translate3d\">\n        translate3d\n      </div>\n    </div>\n    <!-- rotateY: Rotates the element around the Y-axis. -->\n    <div class=\"box\">\n      <div class=\"blue rotateY\">\n        rotateY\n      </div>\n    </div>\n    <!-- rotateX: Rotates the element around the X-axis. -->\n    <div class=\"box\">\n      <div class=\"blue rotateX\">\n        rotateX\n      </div>\n    </div>\n    <!-- translateZ: Moves the element along the Z-axis. -->\n    <div class=\"box\">\n      <div class=\"blue translateZ\">\n        translateZ\n      </div>\n    </div>\n  </div>\n</body>\n\n</html>"
  },
  {
    "path": "Video 42/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Css Transform</title>\n    <style>\n        * {\n            margin: 0;\n            padding: 0;\n        }\n\n        .box {\n            height: 50px;\n            width: 50px;\n            background-color: beige;\n            border: 2px solid black;\n            transform: rotate(0.125turn);\n            transform-origin: -50% -50%;\n            /* transform: rotateZ(9deg); */\n            /* transform: skewY(34deg); */\n            /* transform: translateY(100%) skewX(40deg) translateX(45%); */\n            display: flex;\n            justify-content: center;\n            align-items: center;\n        }\n\n        .container {\n            margin: 55px;\n            width: 100vw;\n            height: 80vh;\n            border: 2px solid purple;\n        }\n    </style>\n</head>\n\n<body>\n    <div class=\"container\">\n        <div class=\"box\">\n            box\n        </div>\n    </div>\n</body>\n\n</html>"
  },
  {
    "path": "Video 42/style.css",
    "content": ".wrap {\n  margin: 30px auto;\n  max-width: 1000px;\n  width: 90vw;\n  display: flex;\n  flex-flow: row wrap;\n  justify-content: center;\n  font-family: sans-serif;\n}\n\n\n.box {\n  width: calc(20%);\n  margin: 20px 20px;\n  background: #ddd;\n  cursor: pointer;\n  color: #FFF;\n  text-align: center;\n  line-height: 130px;\n}\n\n\n.blue {\n  background-color: rgba(56, 207, 248, 0.5);\n}\n\n\n.scaleX {\n  transform: scaleX(1);\n  transition: transform 0.5s ease;\n}\n\n\n.box:hover .scaleX {\n  transform: scaleX(2);\n}\n\n.scaleY {\n  transform: scaleY(1);\n  transition: transform 0.5s ease;\n}\n\n\n.box:hover .scaleY {\n  transform: scaleY(2);\n}\n\n.scale {\n  transform: scale(1, 1);\n  transition: transform 0.5s ease;\n}\n\n\n.box:hover .scale {\n  transform: scale(1.5, 1.5);\n}\n\n.translateX {\n  transform: translateX(1);\n  transition: transform 0.5s ease;\n}\n\n\n.box:hover .translateX {\n  transform: translateX(2em);\n}\n\n.translateY {\n  transform: translateY(1);\n  transition: transform 0.5s ease;\n}\n\n\n.box:hover .translateY {\n  transform: translateY(2em);\n}\n\n.translate {\n  transform: translate(1, 1);\n  transition: transform 0.5s ease;\n}\n\n\n.box:hover .translate {\n  transform: translate(2em, 2em);\n}\n\n.matrix {\n  transform: matrix(1, 1, 1, 1);\n  transition: transform 0.5s ease;\n}\n\n.box:hover .matrix {\n  transform: matrix(1, -1, 0, 1, 0, 0);\n}\n\n.rotate {\n  transform: rotate(0);\n  transition: transform 0.5s ease;\n}\n\n.box:hover .rotate {\n  transform: rotate(270deg);\n}\n\n.skew {\n  transform: skew(1, 1);\n  transition: transform 0.5s ease;\n}\n\n.box:hover .skew {\n  transform: skew(30deg, 20deg);\n\n}\n\n.skewX {\n  transform: skewX(1);\n  transition: transform 0.5s ease;\n}\n\n.box:hover .skewX {\n  transform: skewX(30deg);\n\n}\n\n.skewY {\n  transform: skewY(1);\n  transition: transform 0.5s ease;\n}\n\n.box:hover .skewY {\n  transform: skewY(30deg);\n\n}\n\n.matrix3d {\n  transform: matrix3d(1);\n  transition: transform 0.5s ease;\n}\n\n.box:hover .matrix3d {\n  transform: matrix3d(0.8535533905932737, 0.4999999999999999, 0.14644660940672619, 0, -0.4999999999999999, 0.7071067811865476, 0.4999999999999999, 0, 0.14644660940672619, -0.4999999999999999, 0.8535533905932737, 0, 22.62994231491119, -20.3223304703363, 101.3700576850888, 1)\n}\n\n.translate3d {\n  transform: translate3d(1px, 1px, 1);\n  transition: transform 0.5s ease;\n}\n\n.box:hover .translate3d {\n  transform: translate3d(1px, 1px, 50px) rotate3d(3, 2, 2, 90deg);\n\n}\n\n.rotateY {\n  transform: perspective(1) scaleZ(1) rotateY(0deg);\n  transition: transform 0.5s ease;\n}\n\n.box:hover .rotateY {\n  transform: perspective(500px) scaleZ(2) rotateY(45deg);\n\n}\n\n.rotateX {\n  transform: perspective(1) scaleZ(1) rotateX(0deg);\n  transition: transform 0.5s ease;\n}\n\n.box:hover .rotateX {\n  transform: perspective(500px) scaleZ(2) rotateX(45deg);\n\n}\n\n.translateZ {\n  transform: translateZ(1px);\n  transition: transform 0.5s ease;\n}\n\n.box:hover .translateZ {\n  transform: rotate3d(3, 2, 2, 90deg) translateZ(50px);\n\n}"
  },
  {
    "path": "Video 43/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n    <style>\n        .logo {  \n        }\n\n        .logo img{\n            width: 164px;\n        }\n\n        nav {\n            display: flex;\n            justify-content: space-around;\n            align-items: center;\n            font-family: \"Segoe UI\";\n        }\n\n        .right ul {\n            display: flex;\n            gap: 34px;\n        }\n\n        .right ul li {\n            list-style: none;\n            display: flex;\n            align-items: center;\n            cursor: pointer;\n        }\n        .right ul li span{\n            padding: 0 5px;\n        }\n\n    </style>\n</head>\n\n<body>\n    <header>\n        <nav>\n            <div class=\"logo\">\n                <img src=\"https://www.ultraedit.com/wp-content/uploads/2023/01/Dark-logo.png\" alt=\"\">\n            </div>\n            <div class=\"right\">\n                <ul>\n                    <li><span>Products </span><svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M6 9L11.2929 14.2929C11.6262 14.6262 11.7929 14.7929 12 14.7929C12.2071 14.7929 12.3738 14.6262 12.7071 14.2929L18 9\" stroke=\"#141B34\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                        </svg>\n                        </li>\n                    <li><span>Pricing </span><svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M6 9L11.2929 14.2929C11.6262 14.6262 11.7929 14.7929 12 14.7929C12.2071 14.7929 12.3738 14.6262 12.7071 14.2929L18 9\" stroke=\"#141B34\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                        </svg>\n                        </li>\n                    <li><span>Resources </span><svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M6 9L11.2929 14.2929C11.6262 14.6262 11.7929 14.7929 12 14.7929C12.2071 14.7929 12.3738 14.6262 12.7071 14.2929L18 9\" stroke=\"#141B34\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                        </svg>\n                        </li>\n                    <li><span>About Us </span><svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M6 9L11.2929 14.2929C11.6262 14.6262 11.7929 14.7929 12 14.7929C12.2071 14.7929 12.3738 14.6262 12.7071 14.2929L18 9\" stroke=\"#141B34\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                        </svg>\n                        </li>\n                    <li>\n                        <img src=\"https://www.ultraedit.com/wp-content/themes/Divi_Child/img/Lang.png\" alt=\"\"></div>\n\n                    </li>\n                </ul>\n            </div>\n        </nav>\n    </header>\n</body>\n\n</html>"
  },
  {
    "path": "Video 44/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n<body>\n    <!-- Design the body of this website: \n         https://bit.ly/UltraEdit-CWH -->\n\n         <a href=\"ue_english.exe\">Download UE</a>\n</body>\n</html>"
  },
  {
    "path": "Video 45/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>CSS Transitions</title>\n    <style>\n        .container{\n            background-color: antiquewhite;\n            width: 50vw;\n            height: 40vh;\n        }\n\n        .box{\n            background-color: aquamarine;\n            width: 5vw;\n            height: 4vh;\n            /* transition-property: background-color, transform;\n            transition-duration: 3s;\n            transition-timing-function: cubic-bezier(0.22, 0.43, 0, 0.99); */\n            /* transition-delay: 1s; */\n            transition: all 3s cubic-bezier(0.09, 0.5, 0, 0.99) 1s;\n        }\n\n        .translate{\n            transform: translateX(10vw) translateY(10vh) scale(2);\n            background-color: blue;\n        }\n    </style>\n</head>\n<body>\n    <div class=\"container\">\n        <div class=\"box translate\"></div>\n    </div>\n</body>\n</html>"
  },
  {
    "path": "Video 46/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>CSS Animations</title>\n    <style>\n        .container{\n            background-color: rgb(9, 106, 106);\n            height: 80vh;\n            width: 30vw;\n        }\n\n        .box{\n            width: 34px;\n            height: 45px; \n            /* animation-name: harryKaAnimation; \n            animation-duration: 1s;\n            animation-iteration-count: infinite;\n            animation-timing-function: cubic-bezier(0, 0, 0, 0.96);\n            animation-delay: 1s;\n            animation-direction: reverse;\n            animation-play-state: paused; */\n            /* animation: name duration timing-function delay iteration-count direction fill-mode; */\n            animation: harryKaAnimation 2s ease-in-out 3s 1, \n                       harry2 3s ease-in-out 3s 1;\n        }\n\n        @keyframes harryKaAnimation {\n            from{\n                background-color: red;\n            }\n            to{\n                background-color: yellow; \n            }\n        }\n\n        @keyframes harry2 {\n            0%{\n                transform: rotate(100deg);\n            }\n            20%{\n                transform: rotate(200deg);\n            }\n            50%{\n                transform: rotate(220deg);\n            }\n            80%{\n                transform: rotate(300deg);\n            }\n            100%{\n                transform: rotate(310deg);\n            }\n        }\n    </style>\n</head>\n<body>\n    <div class=\"container\">\n        <div class=\"box\">\n            Box\n        </div>\n    </div>\n</body>\n</html>"
  },
  {
    "path": "Video 47/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Download UltraEdit text editor for Windows</title>\n    <link rel=\"stylesheet\" href=\"style.css\">\n</head>\n\n<body>\n    <header>\n        <nav>\n            <div class=\"logo\">\n                <img src=\"https://www.ultraedit.com/wp-content/uploads/2023/01/Dark-logo.png\" alt=\"\">\n            </div>\n            <div class=\"right\">\n                <ul>\n                    <li><span>Products </span><svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\"\n                            xmlns=\"http://www.w3.org/2000/svg\">\n                            <path\n                                d=\"M6 9L11.2929 14.2929C11.6262 14.6262 11.7929 14.7929 12 14.7929C12.2071 14.7929 12.3738 14.6262 12.7071 14.2929L18 9\"\n                                stroke=\"#141B34\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                        </svg>\n                    </li>\n                    <li><span>Pricing </span><svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\"\n                            xmlns=\"http://www.w3.org/2000/svg\">\n                            <path\n                                d=\"M6 9L11.2929 14.2929C11.6262 14.6262 11.7929 14.7929 12 14.7929C12.2071 14.7929 12.3738 14.6262 12.7071 14.2929L18 9\"\n                                stroke=\"#141B34\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                        </svg>\n                    </li>\n                    <li><span>Resources </span><svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\"\n                            xmlns=\"http://www.w3.org/2000/svg\">\n                            <path\n                                d=\"M6 9L11.2929 14.2929C11.6262 14.6262 11.7929 14.7929 12 14.7929C12.2071 14.7929 12.3738 14.6262 12.7071 14.2929L18 9\"\n                                stroke=\"#141B34\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                        </svg>\n                    </li>\n                    <li><span>About Us </span><svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\"\n                            xmlns=\"http://www.w3.org/2000/svg\">\n                            <path\n                                d=\"M6 9L11.2929 14.2929C11.6262 14.6262 11.7929 14.7929 12 14.7929C12.2071 14.7929 12.3738 14.6262 12.7071 14.2929L18 9\"\n                                stroke=\"#141B34\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                        </svg>\n                    </li>\n                    <li>\n                        <img src=\"https://www.ultraedit.com/wp-content/themes/Divi_Child/img/Lang.png\" alt=\"\">\n            </div>\n\n            </li>\n            </ul>\n            </div>\n        </nav>\n    </header>\n\n    <main>\n        <section class=\"first\">\n            <span> Download <b>UltraEdit</b> for Windows<img width=\"34\"\n                    src=\"https://www.ultraedit.com/wp-content/uploads/2022/10/Reviews.png\" alt=\"\"></span>\n            <p>Download and try UltraEdit before you buy it! This download includes the full Windows version of the\n                text editor.</p>\n            <div>\n                <button class=\"btn\">\n\n                    DOWNLOAD MAC OR LINUX VERSION\n                </button>\n            </div>\n\n\n        </section>\n\n        <section class=\"second\">\n            <div class=\"download\">\n                <img src=\"https://www.ultraedit.com/wp-content/uploads/2022/11/UE.png\" alt=\"\">\n                <span>Download UltraEdit </span>\n                <span class=\"small\">v2023.1(released 08/16/2023) | Hotfix</span>\n            </div>\n\n            <div class=\"grid\"> \n                <div class=\"item\">\n                    <div class=\"item-lang\">English</div>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 32-bit</a></button>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 64-bit</a></button> \n                </div>\n                <div class=\"item\">\n                    <div class=\"item-lang\">English</div>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 32-bit</a></button>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 64-bit</a></button> \n                </div>\n                <div class=\"item\">\n                    <div class=\"item-lang\">English</div>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 32-bit</a></button>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 64-bit</a></button> \n                </div>\n                <div class=\"item\">\n                    <div class=\"item-lang\">English</div>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 32-bit</a></button>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 64-bit</a></button> \n                </div>\n                <div class=\"item\">\n                    <div class=\"item-lang\">English</div>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 32-bit</a></button>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 64-bit</a></button> \n                </div>\n                <div class=\"item\">\n                    <div class=\"item-lang\">English</div>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 32-bit</a></button>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 64-bit</a></button> \n                </div>\n                <div class=\"item\">\n                    <div class=\"item-lang\">English</div>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 32-bit</a></button>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 64-bit</a></button> \n                </div>\n                <div class=\"item\">\n                    <div class=\"item-lang\">English</div>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 32-bit</a></button>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 64-bit</a></button> \n                </div>\n                <div class=\"item\">\n                    <div class=\"item-lang\">English</div>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 32-bit</a></button>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 64-bit</a></button> \n                </div>\n                <div class=\"item\">\n                    <div class=\"item-lang\">English</div>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 32-bit</a></button>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 64-bit</a></button> \n                </div>\n                <div class=\"item\">\n                    <div class=\"item-lang\">English</div>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 32-bit</a></button>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 64-bit</a></button> \n                </div>\n                <div class=\"item\">\n                    <div class=\"item-lang\">English</div>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 32-bit</a></button>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 64-bit</a></button> \n                </div>\n                <div class=\"item\">\n                    <div class=\"item-lang\">English</div>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 32-bit</a></button>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 64-bit</a></button> \n                </div>\n                <div class=\"item\">\n                    <div class=\"item-lang\">English</div>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 32-bit</a></button>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 64-bit</a></button> \n                </div>\n                <div class=\"item\">\n                    <div class=\"item-lang\">English</div>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 32-bit</a></button>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 64-bit</a></button> \n                </div>\n                <div class=\"item\">\n                    <div class=\"item-lang\">English</div>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 32-bit</a></button>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 64-bit</a></button> \n                </div>\n                <div class=\"item\">\n                    <div class=\"item-lang\">English</div>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 32-bit</a></button>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 64-bit</a></button> \n                </div>\n                <div class=\"item\">\n                    <div class=\"item-lang\">English</div>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 32-bit</a></button>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 64-bit</a></button> \n                </div>\n                <div class=\"item\">\n                    <div class=\"item-lang\">English</div>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 32-bit</a></button>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 64-bit</a></button> \n                </div>\n                <div class=\"item\">\n                    <div class=\"item-lang\">English</div>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 32-bit</a></button>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 64-bit</a></button> \n                </div>\n                <div class=\"item\">\n                    <div class=\"item-lang\">English</div>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 32-bit</a></button>\n                    <button class=\"btn blue\"><a href=\"/ue_english.exe\">Download 64-bit</a></button> \n                </div>\n                 \n            </div>\n        </section>\n    </main>\n</body>\n\n</html>"
  },
  {
    "path": "Video 47/style.css",
    "content": ".logo {}\n\n.logo img {\n    width: 164px;\n}\n\nnav {\n    display: flex;\n    justify-content: space-around;\n    align-items: center;\n    font-family: \"Segoe UI\";\n}\n\n.right ul {\n    display: flex;\n    gap: 34px;\n}\n\n.right ul li {\n    list-style: none;\n    display: flex;\n    align-items: center;\n    cursor: pointer;\n}\n\n.right ul li span {\n    padding: 0 5px;\n}\n\n.first {\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n    gap: 23px;\n    margin: 70px;\n    font-family: sans-serif;\n}\n\n.first span {\n    font-size: 40px;\n}\n\nsection span img {\n    width: 82px;\n    margin: 0 23px;\n}\n\n.first p {\n    font-size: 23px;\n    width: 44vw;\n    text-align: center;\n}\n\n\n\n.btn {\n    background: #00b6d1;\n    padding: 14px 16px;\n    color: white;\n    border: none;\n    border-radius: 6px;\n    font-weight: 700;\n    margin: 12px 0;\n    cursor: pointer;\n}\n.btn a{\n    text-decoration: none;\n    color: white;\n}\n\n.green {\n    background-color: #5cb85c;\n}\n\n.flex {\n    display: flex;\n}\n\n.small {\n    font-size: 12px;\n}\n\n.second { \n    max-width: 50vw;\n    margin: auto; \n}\n\n.item {\n    padding: 23px;\n    background: #f9f9f9;\n    border-radius: 12px;\n    font-size: 20px;\n    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n    text-align: center;\n}\n\n.item-lang{\n    font-weight: 700;\n    text-align: center;\n    padding-bottom: 36px;\n}\n\n.grid{\n    display: grid;\n    grid-template-columns: 1fr 1fr 1fr;\n    gap:12px\n}\n\n.download :nth-child(2){\n    font-size: 23px;\n}\n\n.download img{\n    padding: 0px 12px;\n}\n.download{\n    display: flex;\n    font-family: sans-serif;\n    gap: 10px;\n    align-items: center;\n}\n\n@media screen and (max-width: 1145px) {\n    .grid{ \n        grid-template-columns: 1fr; \n    }\n}"
  },
  {
    "path": "Video 48/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n    <style>\n        .box {\n            height: 121px;\n            width: 121px;\n            background-color: red;\n            border-radius: 70px;\n            position: absolute;\n            bottom: 0;\n            left: 0; \n        }\n\n        .container {\n            position: relative;\n            height: 80vh;\n            width: 80vw;\n            background-color: blue;\n        }\n \n    </style>\n</head>\n\n<body>\n    <div class=\"container\">\n\n        <div class=\"box\">\n        </div>\n    </div>\n    <!-- \n   \n     -->\n</body>\n\n</html>"
  },
  {
    "path": "Video 49/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>CSS object Fit and position</title>\n    <style>\n        .container {\n            height: 488px;\n            width: 466px;\n            border: 2px solid black;\n            /* background-color: azure; */\n            background-position: center center;\n            background-clip: border-box;\n\n            background-image: url(\"https://us.123rf.com/450wm/progressman/progressman1909/progressman190900115/130695651-woman-in-black-coat-walking-along-the-sea.jpg?ver=6\");\n            background-repeat: no-repeat;\n        }\n\n        img {\n            width: 466px;\n            height: 488px;\n            object-fit: contain;\n            /* object-fit: fill; */\n            object-position: 10px 20px;\n            /* object-position: bottom right; */\n            /* object-fit: contain; */\n        }\n    </style>\n</head>\n\n<body>\n    <div class=\"container\">\n        \n        <!-- <img src=\"https://images.unsplash.com/photo-1575936123452-b67c3203c357?q=80&w=1000&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8Mnx8aW1hZ2V8ZW58MHx8MHx8fDA%3D\" alt=\"\"> -->\n    </div>\n</body>\n\n</html>"
  },
  {
    "path": "Video 50/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>CSS Filters</title>\n    <style> \n        /* img{\n            filter: blur(10px);\n        } */\n\n        .img1{\n            filter: brightness(122%);\n        }\n\n        .img2{}\n\n        .img3{\n            filter: grayscale(20%);\n        }\n       \n    </style>\n</head>\n<body>\n    <div class=\"container\"> \n        <img class=\"img1\" src=\"https://img.freepik.com/free-photo/programming-background-with-person-working-with-codes-computer_23-2150010125.jpg?size=626&ext=jpg\" alt=\"\">\n        <img class=\"img2\" src=\"https://c.ndtvimg.com/2023-09/154fgjlg_shah-rukh-khan-_625x300_23_September_23.jpg\" alt=\"\">\n        <img class=\"img3\" src=\"https://images.hindustantimes.com/img/2022/11/12/550x309/akshay_kumar_1659860706633_1668255913307_1668255913307.jpg\" alt=\"\">\n    </div>\n</body>\n</html>"
  },
  {
    "path": "Video 51/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n    <style>\n        .box {\n            height: 121px;\n            width: 121px;\n            background-color: red;\n            border-radius: 70px;\n            position: absolute;\n            bottom: 0;\n            left: 0;   \n            animation: animateX 3s linear infinite, animateY 1s ease-out infinite alternate;\n        }\n\n        .container {\n            position: relative;\n            height: 80vh;\n            width: 80vw;\n            background-color: blue;\n        }\n\n        @keyframes animateX {\n            from{\n                left: 0;\n            }\n            to{\n                left: 100%;\n            }\n        }\n\n        @keyframes animateY {\n           from{\n                bottom: 0;\n            }\n            to{\n                bottom: 100% ;\n            }\n        }\n \n    </style>\n</head>\n\n<body>\n    <div class=\"container\">\n\n        <div class=\"box\">\n        </div>\n    </div>\n    <!-- \n   \n     -->\n</body>\n\n</html>"
  },
  {
    "path": "Video 52/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n<body>\n    <!-- No Code for this video  -->\n</body>\n</html>"
  },
  {
    "path": "Video 53/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Netflix India – Watch TV Shows Online, Watch Movies Online</title>\n    <link rel=\"stylesheet\" href=\"style.css\">\n</head>\n\n<body>\n\n    <div class=\"main\">\n        <nav>\n            <span><img width=\"53\" src=\"assets/images/logo.svg\" alt=\"\"></span>\n            <div>\n                <button class=\"btn\">English</button>\n                <button class=\"btn btn-red-sm\">Sign In</button>\n            </div>\n        </nav>\n        <div class=\"box\">\n        </div>\n        <div class=\"hero\">\n            <span>Enjoy big movies, hit series and more from ₹ 149.</span>\n            <span>Join today. Cancel anytime.</span>\n            <span>Ready to watch? Enter your email to create or restart your membership.</span>\n            <div class=\"hero-buttons\">\n                <input type=\"text\" placeholder=\"Email Address\">\n                <button class=\"btn btn-red\">Get Started &gt;</button>\n            </div>\n        </div>\n\n        <div class=\"separation\"></div>\n\n    </div>\n\n    <section class=\"first\">\n        <div>\n            <span>Enjoy on your TV</span>\n            <span>Watch on smart TVs, PlayStation, Xbox, Chromecast, Apple TV, Blu-ray players and more.</span>\n        </div>\n\n        <div class=\"secImg\">\n            <img src=\"https://assets.nflxext.com/ffe/siteui/acquisition/ourStory/fuji/desktop/tv.png\" alt=\"\">\n            <video src=\"https://assets.nflxext.com/ffe/siteui/acquisition/ourStory/fuji/desktop/video-tv-in-0819.m4v\"\n                autoplay loop muted></video>\n        </div>\n    </section>\n    <div class=\"separation\"></div>\n\n    <section class=\"first second\">\n\n        <div class=\"secImg\">\n            <img src=\"https://assets.nflxext.com/ffe/siteui/acquisition/ourStory/fuji/desktop/mobile-0819.jpg\" alt=\"\">\n\n        </div>\n        <div>\n            <span>Download your shows to watch offline</span>\n            <span>Save your favourites easily and always have something to watch.</span>\n        </div>\n    </section>\n\n    <div class=\"separation\"></div>\n    <section class=\"first third\">\n        <div>\n            <span>Watch everywhere</span>\n            <span>Stream unlimited movies and TV shows on your phone, tablet, laptop, and TV.</span>\n        </div>\n\n        <div class=\"secImg\">\n            <img src=\"https://assets.nflxext.com/ffe/siteui/acquisition/ourStory/fuji/desktop/tv.png\" alt=\"\">\n            <video src=\"https://assets.nflxext.com/ffe/siteui/acquisition/ourStory/fuji/desktop/video-devices-in.m4v\"\n                autoplay loop muted></video>\n        </div>\n    </section>\n    <div class=\"separation\"></div>\n\n\n    <section class=\"first second\">\n\n        <div class=\"secImg\">\n            <img src=\"https://occ-0-2849-3646.1.nflxso.net/dnm/api/v6/19OhWN2dO19C9txTON9tvTFtefw/AAAABVr8nYuAg0xDpXDv0VI9HUoH7r2aGp4TKRCsKNQrMwxzTtr-NlwOHeS8bCI2oeZddmu3nMYr3j9MjYhHyjBASb1FaOGYZNYvPBCL.png?r=54d\"\n                alt=\"\">\n\n        </div>\n        <div>\n            <span>Create profiles for kids</span>\n            <span>Send children on adventures with their favourite characters in a space made just for them—free with\n                your membership.</span>\n        </div>\n    </section>\n\n    <div class=\"separation\"></div>\n\n    <section class=\"faq\">\n        <h2>Frequently Asked Questions</h2>\n        <div class=\"faqbox\">\n            <span>What is NetFlix</span>\n            <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"white\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M12 4V20\" stroke=\"#141B34\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                <path d=\"M4 12H20\" stroke=\"#141B34\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n            </svg>\n\n        </div>\n        <div class=\"faqbox\">\n            <span>How much does Netflix cost?</span>\n            <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"white\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M12 4V20\" stroke=\"#141B34\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                <path d=\"M4 12H20\" stroke=\"#141B34\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n            </svg>\n\n        </div>\n        <div class=\"faqbox\">\n            <span>What can I watch on Netflix?</span>\n            <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"white\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M12 4V20\" stroke=\"#141B34\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                <path d=\"M4 12H20\" stroke=\"#141B34\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n            </svg>\n\n        </div>\n        <div class=\"faqbox\">\n            <span>Where can I watch?</span>\n            <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"white\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M12 4V20\" stroke=\"#141B34\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                <path d=\"M4 12H20\" stroke=\"#141B34\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n            </svg>\n\n        </div>\n    </section>\n    <div class=\"separation\"></div>\n\n    <footer>\n        <div class=\"questions\">\n            Questions? Call 000-800-919-1694\n        </div>\n        <div class=\"footer\">\n            <div class=\"footer-item\"> \n                <a href=\"faq\">Investor Relations</a>\n                <a href=\"faq\">Jobs</a>\n                <a href=\"faq\">Ways to Watch</a>\n                <a href=\"faq\">Terms of Use</a>\n            </div>\n\n            <div class=\"footer-item\"> \n                <a href=\"faq\">Help Centre</a>\n                <a href=\"faq\">Account</a>\n                <a href=\"faq\">Speed Test</a>\n                <a href=\"faq\">Legal Notices</a>\n            </div>\n            <div class=\"footer-item\">\n                <a href=\"faq\">Media Centre</a>\n                <a href=\"faq\">Privacy</a>\n                <a href=\"faq\">Cookie Preferences</a> \n                <a href=\"faq\">Corporate</a>\n            </div>\n\n            <div class=\"footer-item\">\n                <a href=\"faq\">Contact Us</a>\n                <a href=\"faq\">Speed Test</a> \n                <a href=\"faq\">Legal Notices</a> \n                <a href=\"faq\">Only on Netflix</a>\n            </div>\n        </div>\n    </footer>\n</body>\n\n</html>"
  },
  {
    "path": "Video 53/style.css",
    "content": "@import url('https://fonts.googleapis.com/css2?family=Martel+Sans:wght@600&family=Poppins:wght@300;400;700&display=swap');\n\n* {\n    padding: 0;\n    margin: 0;\n    font-family: 'Poppins', sans-serif;\n}\n\nbody {\n    background-color: black;\n}\n\n.main {\n    background-image: url(\"assets/images/bg.jpg\");\n    background-position: center center;\n    background-size: max(1200px, 100vw);\n    background-repeat: no-repeat;\n    height: 644px;\n    position: relative;\n}\n\n.main .box {\n    height: 644px;\n    width: 100%;\n    opacity: 0.69;\n    position: absolute;\n    top: 0;\n    background-color: black;\n}\n\nnav {\n    max-width: 60vw;\n    justify-content: space-between;\n    margin: auto;\n    display: flex;\n    align-items: center;\n    height: 100px;\n}\n\nnav img {\n    color: red;\n    width: 130px;\n    position: relative;\n    z-index: 10;\n}\n\nnav button {\n    position: relative;\n    z-index: 10;\n}\n\n.hero {\n    font-family: 'Martel Sans', sans-serif;\n    height: calc(100% - 100px);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex-direction: column;\n    color: white;\n    position: relative;\n    gap: 23px;\n    padding: 0 30px;\n}\n\n.hero> :nth-child(1) {\n    font-family: 'Poppins', sans-serif;\n    font-weight: bolder;\n    font-size: 48px;\n    text-align: center;\n}\n\n.hero> :nth-child(2) {\n    font-weight: 400;\n    font-size: 24px;\n    text-align: center;\n}\n\n.hero> :nth-child(3) {\n    font-weight: 400;\n    font-size: 20px;\n    text-align: center;\n}\n\n.separation {\n    height: 7px;\n    background-color: rgb(46, 44, 44);\n    position: relative;\n    z-index: 20;\n}\n\n.btn {\n    padding: 3px 8px;\n    font-weight: 400;\n    color: white;\n    background-color: rgba(248, 243, 243, 0.021);\n    border-radius: 4px;\n    border: 1px solid white;\n    cursor: pointer;\n\n}\n\n.btn-red {\n    background-color: red;\n    color: white;\n    padding: 3px 24px;\n    font-size: 20px;\n    border-radius: 4px;\n    font-weight: 400;\n}\n\n.btn-red-sm {\n    background-color: red;\n    color: white;\n}\n\n.hero-buttons {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 16px;\n}\n\n.main input {\n    padding: 7px 101px 8px 14px;\n    color: white;\n    font-size: 12px;\n    border-radius: 4px;\n    background-color: rgba(23, 23, 23, 0.7);\n    border: 1px solid rgba(246, 238, 238, 0.5);\n}\n\n.first {\n    display: flex;\n    justify-content: center;\n    max-width: 70vw;\n    margin: auto;\n    color: white;\n    justify-content: center;\n    align-items: center;\n}\n\n\n\n.secImg {\n    position: relative;\n}\n\n.secImg img {\n    width: 555px;\n    position: relative;\n    z-index: 10;\n}\n\n.secImg video {\n    position: absolute;\n    top: 51px;\n    right: 0;\n    width: 555px;\n}\n\nsection.first>div {\n    display: flex;\n    flex-direction: column;\n    padding: 34px 0;\n}\n\nsection.first>div :nth-child(1) {\n    font-size: 48px;\n    font-weight: bolder;\n}\n\n\nsection.first>div :nth-child(2) {\n    font-size: 24px;\n\n}\n\n\n.faq h2 {\n    text-align: center;\n    font-size: 48px;\n}\n\n.faq {\n    background: black;\n    color: white;\n    padding: 34px;\n}\n\n.faqbox:hover {\n    background-color: #414141;\n    color: white;\n}\n\n.faqbox svg {\n    filter: invert(1);\n}\n\n.faqbox {\n    transition: all 1s ease-out;\n    font-size: 24px;\n    display: flex;\n    justify-content: space-between;\n    background-color: #2d2d2d;\n    padding: 24px;\n    max-width: 60vw;\n    margin: 34px auto;\n    cursor: pointer;\n}\n\nfooter {\n    color: white;\n    max-width: 60vw;\n    margin: auto;\n    padding: 60px;\n}\n\nfooter .questions {\n    padding: 34px 0;\n}\n\n\n.footer {\n    display: grid;\n    grid-template-columns: 1fr 1fr 1fr 1fr;\n    color: white;\n}\n\n\n\n@media screen and (max-width: 1300px) {\n\n    nav{\n        max-width: 90vw;\n    }\n\n    .first {\n        flex-wrap: wrap;\n    }\n\n    .secImg img {\n        width: 305px;\n    }\n\n    .secImg video {\n        width: 305px;\n    }\n\n    .hero> :nth-child(1) {\n        font-size: 32px;\n    }\n\n    .hero> :nth-child(2) {\n        font-size: 18px;\n    }\n\n    .hero> :nth-child(3) {\n        font-size: 18px;\n    }\n\n    .hero-buttons {\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        justify-content: center;\n        gap: 16px;\n    }\n\n    .faq h2 {\n        text-align: center;\n        font-size: 32px;\n    }\n\n    footer {\n        max-width: 90vw;\n        padding: 75px 0;\n    }\n\n    .footer-item{\n        align-items: center;\n    }\n \n\n}\n\n\n\n@media screen and (max-width: 1300px) {\n\n    .footer {\n        display: grid;\n        grid-template-columns: 1fr 1fr;\n        gap: 25px;\n    }\n}\n\n\n.footer a {\n    font-size: 14px;\n    color: white;\n}\n\n.footer-item {\n    display: flex;\n    flex-direction: column;\n    gap: 23px;\n}"
  },
  {
    "path": "Video 54/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>JavaScript Introduction</title>\n</head>\n<body>\n   <div class=\"box\">\n        Hey I am a Box\n   </div>\n   <button>Submit</button>\n\n<script src=\"script.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "Video 54/new.js",
    "content": "console.log(\"Hello World\")\nconsole.log(\"Code is running...\")\nconsole.log(\"Code is also running...\")\nconsole.log(\"Code is looking like a wow...\")"
  },
  {
    "path": "Video 54/script.js",
    "content": "alert(\"Hello World\");\n\nconsole.log(\"Code is running...\")\nconsole.log(\"Code is also running...\")\nconsole.log(\"Code is looking like a wow...\")\n\nvar a = prompt(\"Enter your number\")\nvar isTrue = confirm(\"Are you sure you want to leave this page and blast your computer \")\n\nif(isTrue){\n    console.log(\"Computer is blasting\")\n}\n\nelse{\n    console.log(\"Computer is not blasting\")\n\n}\nconsole.log(\"Your number is \" + a)\n\ndocument.title = \"Hey I am good\"\n\n// document.body.style.backgroundColor = \"red\""
  },
  {
    "path": "Video 55/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>JavaScript Variables</title>\n</head>\n<body>\n    <script src=\"script.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "Video 55/script.js",
    "content": "console.log(\"Hey this is tutorial 55\");\n\nvar a = 5;\n// a = a + 1\nlet b = 6;\nlet c = \"Harry\";\nlet _a = \"Shubham\";\n// var 55a = \"Rohan\"; // Not Allowed\n\n// console.log(a +  b + 8);\n// console.log(typeof a, typeof b, typeof c);\n{\n    // let a = 66;\n    console.log(a)\n}\nconsole.log(a)\n// const a1 = 6;\n// a1 = a1 + 1; // Not Allowed because a1 is constant\n\n\nlet x = \"Harry bhai\";\nlet y = 22;\nlet z = 3.55;\nconst p = true;\nlet q = undefined;\nlet r = null;\n\nconsole.log(x, y, z, p, q, r)\nconsole.log(typeof x, typeof y, typeof z, typeof p, typeof q, typeof r)\n\n\nlet o = {\n    \"name\": \"Harry\",\n    \"job code\": 5600,\n    \"is_handsome\": true\n}\n\nconsole.log(o);\no.salary = \"100crores\";\nconsole.log(o);\no.salary = \"500crores\";\nconsole.log(o);\n"
  },
  {
    "path": "Video 56/index.js",
    "content": "console.log(\"Hello I am conditional tutorial\")\n\nlet age = 1;\n// let grace = 2;\n\n// age += grace\n// console.log(age)\n// console.log(age + grace)\n// console.log(age - grace)\n// console.log(age * grace)\n// console.log(age / grace)\n// console.log(age ** grace)\n// console.log(age % grace)\n\n/*\nI am a \nmultiline \ncomment\n*/\n\nif (age == 18) {\n    console.log(\"You can drive\");\n}\n\nelse if (age == 0) {\n    console.log(\"Are you kidding?\")\n}\n\nelse if (age == 1) {\n    console.log(\"Are you again kidding?\")\n}\n\nelse {\n    console.log(\"You cannot drive\");\n}\n\n\na = 6;\nb = 8;\nlet c = a > b ? (a - b) : (b - a);\n\n/*\ntranslates to:\nif(a>b){\n    let c = a - b;\n}\nelse {\n    let c = a - b;\n}\n\n*/\n"
  },
  {
    "path": "Video 57/index.js",
    "content": "console.log(\"I am a tutorial on Loops\")\n\nlet a = 1;\n// console.log(a)\n// console.log(a+1)\n// console.log(a+2)\n\n// for (let i = 0; i < 100; i++) { \n//     console.log(a + i); \n// }\n\n// let obj = {\n//     name: \"Harry\",\n//     role: \"Programmer\",\n//     company: \"CodeWithHarry AI\"\n// }\n \n// for (const key in obj) {  \n//         console.log(key)\n// }\n\n// for (const c of \"Harry\") {\n//     console.log(c)\n// }\n\n// let i = 0;\n// while (i<60000) {\n//     console.log(i)\n//     i++;\n// }\n\nlet i = 10;\ndo {\n    console.log(i)\n    i++;\n} while (i<6);\n"
  },
  {
    "path": "Video 58/index.js",
    "content": "function nice(name) {\n    console.log(\"Hey \" + name + \" you are nice!\")\n    console.log(\"Hey \" + name + \" you are good!\")\n    console.log(\"Hey \" + name + \" your tshirt is nice!\")\n    console.log(\"Hey \" + name + \" your course is good too!\")\n}\n\nfunction sum(a, b, c = 3) {\n    // console.log(a + b)\n    console.log(a, b, c)\n    return a + b + c\n}\n\n\nresult1 = sum(3, 2)\nresult2 = sum(7, 5)\nresult3 = sum(3, 13, 1)\n\nconsole.log(\"The sum of these numbers is: \", result1)\nconsole.log(\"The sum of these numbers is: \", result2)\nconsole.log(\"The sum of these numbers is: \", result3)\n\n\nconst func1 = (x)=>{\n    console.log(\"I am an arrow function\", x)\n}\n\nfunc1(34);\nfunc1(66);\nfunc1(84);"
  },
  {
    "path": "Video 59/index.js",
    "content": "/* Create a faulty calculator using JavaScript\n\nThis faulty calculator does following:\n1. It takes two numbers as input from the user\n2. It perfoms wrong operations as follows:\n\n+ ---> -\n* ---> +\n- ---> /\n/ ---> **\n\n\nIt performs wrong operation 10% of the times\n\n*/"
  },
  {
    "path": "Video 60/index.js",
    "content": "console.log(\"This is strings tutorial\")\nlet a = \"Harry\";\nconsole.log(a[0]);\nconsole.log(a[1]);\nconsole.log(a[2]);\nconsole.log(a[3]);\nconsole.log(a[4]);\n// console.log(a[5]);\n\nconsole.log(a.length)\n\nlet real_name = \"Harry\"\nlet friend = \"Rohan\"\nconsole.log(\"His name is \" + real_name + \" and his friends name is \" + friend)\nconsole.log(`His name is ${real_name} and his friends name is ${friend}`)\n\nlet b = \"ShivamSh\"\nconsole.log(b.toUpperCase())\nconsole.log(b.toLowerCase()) \nconsole.log(b.length) \nconsole.log(b.slice(1, 5)) \nconsole.log(b.slice(1)) \n\nconsole.log(b.replace(\"Sh\", \"77\"))\nconsole.log(b.concat(a, \"Aishwariya\", \"Rahul\", \"Priya\"))\n\nconsole.log(b)\n"
  },
  {
    "path": "Video 61/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n<body>\n    <script src=\"index.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "Video 61/index.js",
    "content": "/* Create a faulty calculator using JavaScript\n\nThis faulty calculator does following:\n1. It takes two numbers as input from the user\n2. It perfoms wrong operations as follows:\n\n+ ---> -\n* ---> +\n- ---> /\n/ ---> **\n\nIt performs wrong operation 10% of the times\n\n*/\n\nlet random = Math.random()\nconsole.log(random)\nlet a = prompt(\"Enter first number\")\nlet c = prompt(\"Enter operation\")\nlet b = prompt(\"Enter second number\")\n\nlet obj = {\n    \"+\": \"-\",\n    \"*\": \"+\",\n    \"-\": \"/\",\n    \"/\": \"**\",\n}\n\n\n\nif (random > 0.1) {\n    // Perform correct calculation\n    console.log(`The result is ${a} ${c} ${b}`)\n    alert(`The result is ${eval(`${a} ${c} ${b}`)}`)\n    \n}\n\nelse {\n    // Perform wrong calculation\n    c = obj[c]\n    alert(`The result is ${eval(`${a} ${c} ${b}`)}`) \n\n}"
  },
  {
    "path": "Video 62/index.js",
    "content": "/* Create a business name generator by combining list of adjectives and shop name and another word\n\n\nAdjectives:\nCrazy \nAmazing\nFire \n\nShop Name:\nEngine\nFoods\nGarments\n\nAnother Word:\nBros\nLimited\nHub\n\n\n\n*/\n\n\n"
  },
  {
    "path": "Video 63/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n<body>\n    <script src=\"mfr.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "Video 63/index.js",
    "content": "let arr = [1, 2, 4, 5, 7]\n//  Index  0, 1, 2, 3, 4\n\narr[0] = 5666;\n// console.log(arr, typeof arr);\n// console.log(arr.length)\n\n// console.log(arr[0])\n// console.log(arr[2])\n// console.log(arr[4])\n\nconsole.log(arr.toString())\nconsole.log(arr.join(\" and \"))\n\n\n \n// let numbers = [1, 2, 3, 4, 5] \n// numbers.splice(1, 2)    \n// numbers.splice(1, 3)  \n// numbers.splice(1, 3, 222, 333) \n// (4) [1, 222, 333, 5]"
  },
  {
    "path": "Video 63/loops.js",
    "content": "let a = [1, 93, 5, 6, 88]\n\n\n// for (let index = 0; index < a.length; index++) {\n//     const element = a[index];\n//     console.log(element)\n    \n// }\n\n// a.forEach((value, index, arr)=>{\n//     console.log(value, index, arr)\n// })\n\n// let obj = {\n//     a: 1,\n//     b: 2,\n//     c: 3\n// }\n// for (const key in obj) {\n//     if (Object.hasOwnProperty.call(obj, key)) {\n//         const element = obj[key]; \n//         console.log(key, element)\n//     }\n// }\n\nfor (const value of a) {\n    console.log(value)\n}"
  },
  {
    "path": "Video 63/mfr.js",
    "content": "let arr = [1, 13, 5 ,7, 11];\n// let newArr = []\n// for (let index = 0; index < arr.length; index++) {\n//     const element = arr[index];\n//     newArr.push(element**2)\n// }\n\nlet newArr = arr.map((e, index, array)=>{\n    return e**2\n})\n\nconsole.log(newArr)\nconst greaterThanSeven = (e)=>{\n    if(e>7){\n        return true\n    }\n    return false\n}\nconsole.log(arr.filter(greaterThanSeven))\n\nlet arr2 = [1,2,3,4,5,6]\n\nconst red = (a, b)=>{\n    return a+b\n}\n\nconsole.log(arr2.reduce(red))"
  },
  {
    "path": "Video 64/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n<body>\n    <script>\n        let rand = Math.random()\n        let first, second, third;\n        // 0 0.33 0.66 1\n\n\n        // Lets generate the first word\n        if(rand<0.33){\n            first = \"Crazy\"\n        }\n        else if(rand<0.66 && rand>=0.33){\n            first = \"Amazing\"\n        }\n        else{\n            first = \"Fire\"\n        }\n\n        // Lets generate the second word\n        rand = Math.random()\n        if(rand<0.33){\n            second = \"Engine\"\n        }\n        else if(rand<0.66 && rand>=0.33){\n            second = \"Foods\"\n        }\n        else{\n            second = \"Garments\"\n        }\n\n        // Lets generate the third word\n        rand = Math.random()\n        if(rand<0.33){\n            third = \"Bros\"\n        }\n        else if(rand<0.66 && rand>=0.33){\n            third = \"Limited\"\n        }\n        else{\n            third = \"Hub\"\n        }\n\n        console.log(`${first} ${second} ${third}`)\n    </script>\n</body>\n</html>"
  },
  {
    "path": "Video 65/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n<body>\n    <!-- \n        Write a program to calculate factorial of a number using reduce and using for loops\n\n\n        6! = 6*5*4*3*2*1\n\n     -->\n</body>\n</html>"
  },
  {
    "path": "Video 66/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>JavaScript DOM</title>\n</head>\n<body>\n    <div class=\"container\">\n        <div class=\"box\">\n            This is a box\n        </div>\n    </div>\n    <script>\n        document.title = \"Harry is good\"\n        console.log(document.title)\n        console.log(document.body)\n        document.body.style.backgroundColor = \"green\";\n    </script>\n</body>\n</html>"
  },
  {
    "path": "Video 67/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n    <style>\n        .box{\n            height: 45px;\n            width: 56px;\n            border: 2px solid black;\n            margin: 5px;\n            padding: 5px;\n        }\n    </style>\n</head>\n<body>\n    <div class=\"container\">\n        <!-- this is me  -->\n        <div class=\"box\">Box1</div>\n        <div class=\"box\">Box2</div>\n        <div class=\"box\">Box3</div>\n        <div class=\"box\">Box4</div>\n        <div class=\"box\">Box5</div>\n    </div>\n    \n    <table>\n        <tr>\n          <th>Name</th>\n          <th>Age</th>\n        </tr>\n        <tr>\n          <td>Harry</td>\n          <td>100</td>\n        </tr>\n      </table>\n      \n    <script src=\"script.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "Video 67/script.js",
    "content": "console.log(\"Hello world\")\n\ndocument.body.firstElementChild \ndocument.body.firstElementChild.childNodes \ndocument.body.firstElementChild.children"
  },
  {
    "path": "Video 68/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n    <style>\n        .box{\n            height: 34px;\n            width: 34px;\n            margin: 34px;\n            padding: 34px;\n            border: 2px solid black;\n        }\n    </style>\n</head>\n<body>\n    <div class=\"container\">\n        <div class=\"box\">Bhupendra Jogi 1 </div>\n        <div class=\"box\">Bhupendra Jogi 1.5 </div>\n        <div class=\"box\">Bhupendra Jogi 2</div>\n        <div id=\"redbox\" class=\"box\">Bhupendra Jogi 2.5</div>\n        <div class=\"box\">Bhupendra Jogi 3</div>\n        <div class=\"box\">Bhupendra Jogi 4</div>\n        <div class=\"box\">Bhupendra Jogi 5</div>\n    </div>\n\n    <script src=\"script.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "Video 68/script.js",
    "content": "console.log(\"Harry\")\n\n// let boxes = document.getElementsByClassName(\"box\")\n// console.log(boxes)\n\n// boxes[2].style.backgroundColor = \"red\"\n\n// document.getElementById(\"redbox\").style.backgroundColor = \"red\"\n\n// document.querySelector(\".box\").style.backgroundColor = \"green\";\nconsole.log(document.querySelectorAll(\".box\"))\n\ndocument.querySelectorAll(\".box\").forEach(e =>{\n    e.style.backgroundColor = \"green\";\n}) "
  },
  {
    "path": "Video 69/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n<body>\n    <script src=\"script.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "Video 69/script.js",
    "content": "let a = 7\n\nfunction factorial(number){\n   let arr = Array.from(Array(number+1).keys())\n   let c = arr.slice(1,).reduce((a, b)=> a*b )\n   return c\n}\n\n\nfunction facFor(number){\n    let fac = 1;\n    for (let index = 1; index <= number; index++) {\n        fac = fac * index\n    }\n    return fac\n}\nconsole.log(factorial(a))\nconsole.log(facFor(a))"
  },
  {
    "path": "Video 70/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n    <style>\n        .container{\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            gap: 23px;\n        }\n        .box{\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            height: 45px;\n            width: 45px;\n            border: 2px solid black; \n        }\n    </style>\n</head>\n<body>\n    <!-- \n        Given 5 boxes, Assign a random color and a random background to each box using DOM concepts\n     -->\n     <div class=\"container\">\n        <div class=\"box\">Box</div>\n        <div class=\"box\">Box</div>\n        <div class=\"box\">Box</div>\n        <div class=\"box\">Box</div>\n        <div class=\"box\">Box</div>\n     </div>\n</body>\n</html>"
  },
  {
    "path": "Video 71/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n    <style>\n        .red{\n            color: red;\n        }\n    </style>\n</head>\n\n<body>\n    <div class=\"container red bg-green\">\n        <div class=\"box\" style=\"display: flex;\" data-createdby=\"harry\" data-conceptby=\"rohan\" >Hey I am a box</div>\n        <div class=\"box\">Hey I am a box</div>\n        <script>\n            // let div = document.createElement(\"div\");\n            // div.innerHTML = \"I have been inserted <b>by harry</b>\"\n            // div.setAttribute(\"class\", \"created\");\n            // document.querySelector(\".container\").before(div);\n            let cont = document.querySelector(\".container\")\n            cont.insertAdjacentHTML(\"beforebegin\", \"<b> I am under the water. Please h elp me here too much raining.... iuuuuooooo</b>\")\n        </script>\n    </div>\n</body>\n\n</html>"
  },
  {
    "path": "Video 72/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n    <style>\n        .container{\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            gap: 23px;\n        }\n        .box{\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            height: 45px;\n            width: 45px;\n            border: 2px solid black;  \n        }\n    </style>\n</head>\n<body>\n    <!-- \n        Given 5 boxes, Assign a random color and a random background to each box using DOM concepts\n     -->\n     <div class=\"container\">\n        <div class=\"box\">Box</div>\n        <div class=\"box\">Box</div>\n        <div class=\"box\">Box</div>\n        <div class=\"box\">Box</div>\n        <div class=\"box\">Box</div>\n     </div>\n     <script src=\"script.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "Video 72/script.js",
    "content": "console.log(\"Script.js initializing\")\n// let boxes = document.getElementsByClassName(\"box\")\nlet boxes = document.querySelector(\".container\").children \n\n\nfunction getRandomColor(){\n    let val1 = Math.ceil(0 + Math.random()* 255);\n    let val2 = Math.ceil(0 + Math.random()* 255);\n    let val3 = Math.ceil(0 + Math.random()* 255);\n    return `rgb(${val1}, ${val2}, ${val3})`\n}\nArray.from(boxes).forEach(e=>{\n    e.style.backgroundColor = getRandomColor()\n    e.style.color = getRandomColor()\n})\n"
  },
  {
    "path": "Video 73/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n<body>\n    <div class=\"container\">\n        \n    </div>\n    <script src=\"script.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "Video 73/script.js",
    "content": "function createCard(title, cName, views, monthsOld, duration, thumbnail){\n    // Finish this function\n}\n\n\ncreateCard(\"Introduction to Backend | Sigma Web Dev video #2\", \"CodeWithHarry\", 560000, 7, \"31:22\", \"https://i.ytimg.com/vi/tVzUXW6siu0/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLACwWOixJVrKLFindK92kYMgTcQbw\")"
  },
  {
    "path": "Video 74/eventBubbling.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Event bubbling</title>\n    <style>\n        .child {\n            background-color: aliceblue;\n            border: 2px solid black;\n            padding: 14px;\n            margin: 14px;\n            cursor: pointer;\n        }\n\n        .childContainer {\n            background-color: beige;\n            padding: 14px;\n            margin: 14px;\n        }\n\n        .container {\n            background-color: rgb(227, 227, 28);\n            padding: 14px;\n            margin: 14px;\n        }\n    </style>\n</head>\n\n<body>\n    <div class=\"container\">\n        <section class=\"childContainer\">\n            <div class=\"child\">\n                I am a child\n            </div>\n        </section>\n    </div>\n    <script>\n        document.querySelector(\".child\").addEventListener(\"click\", (e) => {\n            e.stopPropagation()\n            alert(\"Child Was clicked\")\n        })\n\n        document.querySelector(\".childContainer\").addEventListener(\"click\", (e) => {\n            e.stopPropagation()\n            alert(\"childContainer Was clicked\")\n        })\n\n        document.querySelector(\".container\").addEventListener(\"click\", (e) => {\n            alert(\"container Was clicked\")\n        })\n\n        function getRandomColor() {\n            let val1 = Math.ceil(0 + Math.random() * 255);\n            let val2 = Math.ceil(0 + Math.random() * 255);\n            let val3 = Math.ceil(0 + Math.random() * 255);\n            return `rgb(${val1}, ${val2}, ${val3})`\n        }\n        // let a = setInterval(() => {\n        //     document.querySelector(\".childContainer\").style.background = getRandomColor();\n        // }, 1000);\n\n        // console.log(a)\n\n        let a = setTimeout(() => {\n            document.querySelector(\".childContainer\").style.background = getRandomColor();\n        }, 5000);\n\n        console.log(a)\n\n\n    </script>\n</body>\n\n</html>"
  },
  {
    "path": "Video 74/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n<body>\n    <div class=\"container\">\n        <div class=\"box\">Hey I am a box</div>\n    </div>\n    <button id=\"btn\">Change Content</button>\n    <script src=\"script.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "Video 74/script.js",
    "content": "let button = document.getElementById(\"btn\")\n// List of all mouse events \n// https://developer.mozilla.org/en-US/docs/Web/API/Element#mouse_events\n\n\nbutton.addEventListener(\"dblclick\", ()=>{\n    document.querySelector(\".box\").innerHTML = \"<b>Yayy you were clicked</b> Enjoy your click!\"\n})\n\nbutton.addEventListener(\"contextmenu\", ()=>{\n    alert(\"Dont hack us by Right click Please\")\n})\n\ndocument.addEventListener(\"keydown\", (e)=>{\n    console.log(e, e.key, e.keyCode)\n})"
  },
  {
    "path": "Video 75/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n<body>\n    <script src=\"promise.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "Video 75/promise.js",
    "content": "console.log('This is Promises');\n\nlet prom1 = new Promise((resolve, reject) => {\n    let a = Math.random();\n    if (a < 0.5) {\n        reject(\"No random number was not supporting you\")\n    }\n    else {\n        setTimeout(() => {\n            console.log(\"Yes I am done\")\n            resolve(\"Harry\")\n        }, 3000);\n    }\n})\n\nlet prom2 = new Promise((resolve, reject) => {\n    let a = Math.random();\n    if (a < 0.5) {\n        reject(\"No random number was not supporting you 2\")\n    }\n    else {\n        setTimeout(() => {\n            console.log(\"Yes I am done 2\")\n            resolve(\"Harry 2\")\n        }, 1000);\n    }\n})\n\n \nlet p3 = Promise.race([prom1, prom2])\np3.then((a)=>{\n    console.log(a)\n}).catch(err=>{\n    console.log(err)\n})\n"
  },
  {
    "path": "Video 75/script.js",
    "content": "console.log(\"Harry is a hacker\")\nconsole.log(\"Rohan is a hecker\")\n\n\nsetTimeout(() => {\n    console.log(\"I am inside settimeout\")\n}, 0);\n\nsetTimeout(() => {\n    console.log(\"I am inside settimeout 2\")\n}, 0);\n\nconsole.log(\"The End\")\n\nconst fn = () => {\n  console.log(\"Nothing\")\n}\n\nconst callback = (arg, fn) => {\n    console.log(arg)\n    fn()\n}\n\nconst loadScript = (src, callback) => {\n    let sc = document.createElement(\"script\");\n    sc.src = src;\n    sc.onload = callback(\"Harry\", fn);\n    document.head.append(sc)\n}\n\n\nloadScript(\"https://cdnjs.cloudflare.com/ajax/libs/prism/9000.0.1/prism.min.js\", callback )"
  },
  {
    "path": "Video 76/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n<body>\n    <script src=\"script.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "Video 76/script.js",
    "content": "// async function getData() {\n//     // Simulate getting data from a server\n//     return new Promise((resolve, reject) => {\n//         setTimeout(() => {\n//             resolve(455)\n//         }, 3500);\n//     })\n// }\n\n// settle means resolve or reject\n// resolve means promise has settled successfully\n// reject means promise has not settled successfully\n\nasync function getData() {\n    // Simulate getting data from a server\n    // let x = await fetch('https://jsonplaceholder.typicode.com/todos/1')\n\n    let x = await fetch('https://jsonplaceholder.typicode.com/posts', {\n                method: 'POST',\n                body: JSON.stringify({\n                    title: 'foo',\n                    body: 'bar',\n                    userId: 1,\n                }),\n                headers: {\n                    'Content-type': 'application/json; charset=UTF-8',\n                },\n            })\n    let data = await x.json() \n    return data\n}\n\nasync function main(){\n    console.log(\"Loading modules\")\n\n    console.log(\"Do something else\")\n\n    console.log(\"Load data\")\n\n    let data = await getData()\n\n    console.log(data)\n\n    console.log(\"process data\")\n\n    console.log(\"task 2\")\n\n}\n\nmain()\n\n \n\n// data.then((v) => { \n//     console.log(data)\n\n//     console.log(\"process data\")\n\n//     console.log(\"task 2\")\n \n// })"
  },
  {
    "path": "Video 77/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n    <style>\n        .card {\n            display: flex;\n            margin: 5px;\n            border: 2px solid black;\n            width: 900px;\n            justify-content: center;\n            align-items: center;\n            padding: 12px;\n        }\n\n        .image img {\n            width: 200px;\n        }\n\n        .text h1,\n        p {\n            padding: 2px 0;\n        }\n\n        .image {\n            position: relative;\n        }\n\n        .image .capsule {\n            position: absolute;\n            bottom: 4px;\n            z-index: 10;\n            right: 5px;\n            background: #242020;\n            opacity: 0.9;\n            color: white;\n            padding: 3px;\n            border-radius: 3px;\n            font-size: 14px;\n        }\n    </style>\n</head>\n\n<body>\n    <div class=\"container\">\n        <div class=\"card\">\n            <div class=\"image\">\n                <img src=\"https://i.ytimg.com/vi/tVzUXW6siu0/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLACwWOixJVrKLFindK92kYMgTcQbw\"\n                    alt=\"\">\n                <div class=\"capsule\">31:06</div>\n            </div>\n            <div class=\"text\">\n                <h1>Introduction to Backend | Sigma Web Dev video #2</h1>\n                <p>CodeWithHarry . 727K views . 2 months ago</p>\n            </div>\n        </div>\n    </div>\n    <script src=\"script.js\"></script>\n</body>\n\n</html>"
  },
  {
    "path": "Video 77/script.js",
    "content": "function createCard(title, cName, views, monthsOld, duration, thumbnail) {\n    // Finish this function\n    let viewStr\n    if (views < 1000) {\n        viewStr = views;\n    }\n    else if (views > 1000000) {\n        viewStr = views / 1000000 + \"M\";\n    }\n    else {\n        viewStr = views / 1000 + \"K\";\n    }\n    let html = `<div class=\"card\">\n    <div class=\"image\">\n        <img src=\"${thumbnail}\"\n            alt=\"\">\n        <div class=\"capsule\">${duration}</div>\n    </div>\n    <div class=\"text\">\n        <h1>${title}</h1>\n        <p>${cName} . ${viewStr} views . ${monthsOld} months ago</p>\n    </div> \n</div>`\n\n    document.querySelector(\".container\").innerHTML = document.querySelector(\".container\").innerHTML + html\n}\n\n\ncreateCard(\"Introduction to Backend | Sigma Web Dev video #2\", \"CodeWithHarry\", 560000, 7, \"31:22\", \"https://i.ytimg.com/vi/tVzUXW6siu0/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLACwWOixJVrKLFindK92kYMgTcQbw\")\n\nfunction sum "
  },
  {
    "path": "Video 78/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n<body>\n    <!-- Create a hacking simulator which has green background and it shows these messages with random delay of 1 to 7 seconds \n    \n    Initializing Hacking...\n    Reading your Files...\n    Password files Detected...\n    Sending all passwords and personal files to server...\n    Cleaning up...\n\n    The three dots must blink so that it looks like a real terminal\n    -->\n</body>\n</html>"
  },
  {
    "path": "Video 79/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n<body>\n    <script src=\"script.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "Video 79/script.js",
    "content": "let a = prompt(\"Enter first number\")\n\nlet b = prompt(\"Enter second number\")\nif (isNaN(a) || isNaN(b)) {\n    throw SyntaxError(\"Sorry this is not allowed\")\n}\n\nlet sum = parseInt(a) + parseInt(b)\n\nfunction main(){ \n    let x = 1;\n    try {\n        console.log(\"The sum is \", sum * x)\n        return true\n        \n    } catch (error) {\n        console.log(\"Error aa gaya bhai\")\n        return false\n    } \n    finally{\n        console.log(\"files are being closed and db connection is being closed\")\n    }\n  \n}\n\nlet c = main()\n"
  },
  {
    "path": "Video 80/gs.js",
    "content": "class User {\n\n    constructor(name) {\n      // invokes the setter\n      this.name = name;\n    }\n  \n    get name() {\n      return this._name;\n    }\n  \n    set name(value) {\n      if (value.length < 4) {\n        console.log(\"Name is too short.\");\n        return;\n      }\n      this._name = value;\n    }\n  \n  }\n  \n  let user = new User(\"John\");\n  console.log(user.name); // John\n  \n  user.name = \"Harry\" // Name is too short.\n  console.log(user.name)"
  },
  {
    "path": "Video 80/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n<body>\n    <script src=\"script.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "Video 80/script.js",
    "content": "// let obj = {\n//     a: 1,\n//     b: \"Harry\"\n// }\n\n// console.log(obj)\n\n// let animal = {\n//     eats: true\n// };\n\n// let rabbit = {\n//     jumps: true\n// };\n\n// rabbit.__proto__ = animal; // sets rabbit.[[Prototype]] = animal\n\nclass Animal{\n    constructor(name){\n        this.name = name\n        console.log(\"Object is created...\")\n    }\n\n    eats(){\n        console.log(\"Kha raha hoon\")\n    }\n    jumps(){\n        console.log(\"Kood raha hoon\")\n    }\n}\n\n\nclass Lion extends Animal {\n    constructor(name){\n        super(name) \n        console.log(\"Object is created and he is a lion...\")\n    }\n\n    eats(){\n        super.eats()\n        console.log(\"Kha raha hoon roar\")\n    }\n}\n\nlet a = new Animal(\"Bunny\");\nconsole.log(a)\n\nlet l = new Lion(\"Shera\")\nconsole.log(l)"
  },
  {
    "path": "Video 81/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n    <style>\n        @import url('https://fonts.googleapis.com/css2?family=Martel+Sans:wght@600&family=Noto+Sans:ital,wght@0,200;0,300;0,400;0,500;1,100;1,200;1,300;1,400&family=Poppins:wght@300;400;700&display=swap');\n\n        body {\n            background-color: green;\n            color: white;\n            font-family: 'Martel Sans', sans-serif;\n            font-size: 30px;\n        }\n    </style>\n</head>\n\n<body>\n    <!-- Create a hacking simulator which has green background and it shows these messages with random delay of 1 to 7 seconds \n    \n    Initializing Hacking...\n    Reading your Files...\n    Password files Detected...\n    Sending all passwords and personal files to server...\n    Cleaning up...\n\n    The three dots must blink so that it looks like a real terminal\n    -->\n    <div>Initializing Hacking...</div>\n    <script>\n\n\n\n        const addItem = async (item) => {\n            await randomDelay();\n            let div = document.createElement(\"div\");\n            div.innerHTML = item;\n            document.body.append(div)\n        }\n\n        const randomDelay = () => {\n            return new Promise((resolve, reject) => {\n                timeout = 1 + 6 * Math.random();\n                setTimeout(() => {\n                    resolve()\n                }, timeout * 1000);\n            })\n        }\n\n        async function main() {\n\n\n            let t = setInterval(() => {\n                let last = document.body.getElementsByTagName(\"div\");\n                last = last[last.length - 1]\n                if(last.innerHTML.endsWith(\"...\")){\n                    last.innerHTML = last.innerHTML.slice(0, last.innerHTML.length-3)\n                }\n                else{\n\n                    last.innerHTML = last.innerHTML + \".\"\n                }\n\n            }, 100);\n\n\n            let text = [\"Initialized Hacking now reading your data\",\n                \"Reading your Files\",\n                \"Password files Detected\",\n                \"Sending all passwords and personal files to server\",\n                \"Cleaning up\"]\n\n            for (const item of text) {\n                await addItem(item)\n            }\n\n            await randomDelay()\n            clearInterval(t)\n            \n        }\n        main()\n\n\n    </script>\n</body>\n\n</html>"
  },
  {
    "path": "Video 82/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n<body>\n    <script src=\"script.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "Video 82/script.js",
    "content": "console.log(a1);\n\n\n(async function main(){ \n    // let a = await sleep()\n    // console.log(a)\n    // let b = await sleep()\n    // console.log(b);\n\n    // let [x, y, rest] = [1, 5, 7, 8, 9, 10]\n    // console.log(x, y, rest)\n\n    let obj = {\n        a: 1, \n        b: 2,\n        c: 3\n    }\n\n    let {a, b} = obj\n    console.log(a, b)\n\n    let arr = [1, 4, 6]\n    console.log(sum(arr[0], arr[1], arr[2]))\n    console.log(sum(...arr))\n\n    \n})()\n\nvar a1 = 6;\n\n\nconst sleep = async ()=>{\n    return new Promise((resolve, reject)=>{\n        setTimeout(() => {\n            resolve(45)\n        }, 1000);\n    })\n}\n\nconst sum = async (a, b, c)=>{\n    return a+b+c\n}"
  },
  {
    "path": "Video 83/Problems.md",
    "content": "# Problems for Sigma Developers\n\n1. The Magical Sorting Hat:\n   Imagine you are creating a magical sorting hat for a wizard school. Implement a JavaScript function that takes an array of student names and assigns them to one of the four houses (Gryffindor (length less than 6), Hufflepuff(length less than 8), Ravenclaw(length less than 12), or Slytherin(length greater than or equal to 12)) based on the length of their names.\n\n2. The Double Trouble:\n   You are tasked with writing a function that doubles each element in an array. However, there's a catch: if the array contains consecutive duplicate elements, only double one of them.\n\n3. The Mirror Mirror:\n   Imagine you have a string, and you need to create a new string that is a mirror image of the original. Write a function that appends the reversed version of the original string to itself.\n\n4. The Password Validator:\n   You are building a password validation feature. Create a function that checks if a given password meets the following criteria: at least 8 characters long, contains both uppercase and lowercase letters, and includes at least one digit.\n\n5. The Sum Selector:\n   You are working on a function that should sum all numbers in an array until it encounters a negative number. Write a function that performs this summation.\n\n6. The Vowel Counter:\n   You need to create a function that counts the number of vowels in a given string. Consider both uppercase and lowercase vowels.\n\n7. The Local Storage Manager:\n    You are working on a note-taking app, and you want to implement a function named saveNoteToLocalStorage that takes a note object and saves it to the browser's local storage.\n\n8. Async Array Mapping:\n   Write an asynchronous function that takes an array of numbers and returns a new array of Promises where each number is multiplied by 2 after a delay of 500 milliseconds.\n\n9. The Asynchronous Shopper:\n   Imagine you are building an online shopping application. Write an asynchronous function called placeOrder that simulates placing an order and returns a promise. The promise should resolve with an order confirmation message after a random delay.\n\n10. The Coffee Machine:\n    In your coffee shop application, you need to simulate the process of brewing coffee asynchronously. Write an async function named brewCoffee that takes the type of coffee and returns a promise. The promise should resolve with a message indicating that the coffee is ready after a random delay.\n\n11. The Array Filterer:\n    You are building a search feature for your e-commerce site. Write a function named filterProducts that takes an array of product objects and a filter criterion. The function should return a new array containing only the products that match the filter criterion.\n\n12. The Token Manager:\n    You are developing a user authentication system, and you need to manage user authentication tokens. Implement a function named setAuthToken that takes an authentication token and sets it in localStorage with an expiration time.\n\n13. The Shopping Cart Totalizer:\n    You are working on an e-commerce website, and you need to calculate the total cost of items in the shopping cart. Implement a function named calculateTotal that takes an array of products with prices and quantities and returns the total cost.\n\n14. The Window Scroller:\n    You are developing a single-page application with a smooth scrolling effect. Implement a function named smoothScrollToTop that smoothly scrolls the window to the top when called.\n"
  },
  {
    "path": "Video 83/Solutions/01_houses.js",
    "content": "// The Magical Sorting Hat: Imagine you are creating a magical sorting hat for a wizard school. Implement a JavaScript function that takes an array of student names and assigns them to one of the four houses (Gryffindor (length less than 6), Hufflepuff(length less than 8), Ravenclaw(length less than 12), or Slytherin(length greater than or equal to 12)) based on the length of their names.\n\nlet students = [\"shubh\", \"anajali\", \"Shivani\", \"Shivangi\", \"Annapurna\", \"Shubham\", \"Krishnanendu\", \"Ravindranathan\", \"Shivesh\", \"kaif\", \"Emanuel\"]\n\nlet houses = []\n\nfor (const student of students) {\n    if(student.length < 6){\n        houses.push(\"Gryffindor\")\n    }\n    else if(student.length < 8){\n        houses.push(\"Hufflepuff\")\n    }\n    else if(student.length < 12){\n        houses.push(\"Ravenclaw\")\n    }\n    else{\n        houses.push(\"Slytherin\")\n    }\n}\n\nconsole.log(houses)"
  },
  {
    "path": "Video 83/Solutions/07_localStorage.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n\n<body>\n    <button>Add Note</button>\n    <div class=\"note\"></div>\n    <script>\n\n        function saveNoteToLocalStorage(note) {\n            localStorage.setItem(\"note\", note);\n        }\n\n        let note = localStorage.getItem(\"note\")\n        if(note){\n            document.querySelector(\".note\").innerHTML = note\n        }\n        \n        document.querySelector(\"button\").addEventListener(\"click\", () => {\n            let note = prompt(\"Enter your note\")\n            saveNoteToLocalStorage(note)\n            document.querySelector(\".note\").innerHTML = note\n        })\n\n\n\n\n    </script>\n</body>\n\n</html>"
  },
  {
    "path": "Video 84 - Project 2 - Spotify Clone/css/style.css",
    "content": "@import url('https://fonts.googleapis.com/css2?family=Lato:wght@700&family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap');\n\n\n:root{\n    --a:0;\n}\n* {\n    margin: 0;\n    padding: 0;\n    font-family: 'Roboto', sans-serif;\n}\n\n.close {\n    display: none;\n}\n\nbody {\n    background-color: black;\n    color: white;\n}\n\n.left {\n    width: 25vw;\n    padding: 10px;\n}\n\n.right {\n    width: 75vw;\n}\n\n\n\n.home ul li {\n    display: flex;\n    gap: 15px;\n    width: 14px;\n    list-style: none;\n    padding-top: 14px;\n    font-weight: bold;\n}\n\n.heading {\n    display: flex;\n    gap: 15px;\n    width: 100%;\n    padding-top: 14px;\n    padding: 23px 14px;\n    font-weight: bold;\n    align-items: center;\n    font-size: 13px;\n}\n\n.heading img {\n    width: 30px;\n}\n\n.library {\n    min-height: 80vh;\n    position: relative;\n}\n\n.footer {\n    display: flex;\n    font-size: 10px;\n    color: grey;\n    gap: 13px;\n    position: absolute;\n    bottom: 0;\n    padding: 10px 0;\n\n}\n\n.footer a {\n    color: grey;\n}\n\n.right {\n    margin: 16px 0;\n    position: relative;\n}\n\n.header {\n    display: flex;\n    justify-content: space-between;\n    background-color: rgb(34 34 34);\n}\n\n.header>* {\n    padding: 20px;\n}\n\n.spotifyPlaylists {\n    padding: 16px;\n}\n\n.spotifyPlaylists h1 {\n    padding: 16px;\n}\n\n.cardContainer {\n    margin: 30px;\n    display: flex;\n    gap: 10px;\n    flex-wrap: wrap;\n    overflow-y: auto;\n    max-height: 60vh; \n}\n\n.card {\n    width: 200px;\n    padding: 10px;\n    border-radius: 5px;\n    background-color: #252525;\n    position: relative;\n    transition: all .9s;\n}\n.card:hover{\n    background-color: rgb(105, 103, 103);\n    cursor: pointer;\n    --a: 1;\n}\n\n.card>* {\n    padding-top: 10px;\n}\n\n.card img {\n    width: 100%;\n    object-fit: contain;\n}\n\n.play {\n    width: 28px;\n    height: 28px;\n    background-color: #1fdf64;\n    border-radius: 50%;\n    padding: 4px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    position: absolute;\n    bottom: 88px;\n    right: 17px;\n    opacity: var(--a);\n    transition: all 1s ease-out;\n}\n\n.buttons>* {\n    margin: 0 12px;\n}\n\n.signupbtn {\n    background-color: rgb(34 34 34);\n    color: rgb(156, 148, 148);\n    font-weight: bold;\n    border: none;\n    outline: none;\n    cursor: pointer;\n    font-size: 16px;\n}\n\n.signupbtn:hover {\n    font-size: 17px;\n    color: white\n}\n\n.loginbtn {\n    background-color: white;\n    border-radius: 21px;\n    color: black;\n    padding: 10px;\n    width: 79px;\n    cursor: pointer;\n    font-size: 16px;\n}\n\n.loginbtn:hover {\n    font-weight: bold;\n    font-size: 17px;\n}\n\n\n.playbar {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    position: fixed;\n    bottom: 30px;\n    filter: invert(1);\n    background: #e2d9d9;\n    border-radius: 10px;\n    width: 90%;\n    padding: 12px;\n    width: 70vw;\n    min-height: 40px;\n}\n\n.songbuttons {\n    display: flex;\n    justify-content: center;\n    gap: 16px;\n}\n\n.songList {\n    height: 544px;\n    overflow: auto;\n    margin-bottom: 44px;\n}\n\n.hamburger {\n    display: none;\n    cursor: pointer;\n}\n\n.hamburgerContainer {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    gap: 14px;\n}\n\n.songList ul {\n    padding: 0 12px;\n}\n\n.songList ul li {\n    list-style-type: decimal;\n    display: flex;\n    justify-content: space-between;\n    gap: 12px;\n    cursor: pointer;\n    padding: 12px 0;\n    border: 1px solid rgba(146, 143, 143, 0.491);\n    margin: 12px 0;\n    padding: 13px;\n    border-radius: 5px;\n}\n\n.songList .info {\n    font-size: 13px;\n    width: 344px;\n}\n\n.info div {\n    word-break: break-all;\n}\n\n.playnow {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n}\n\n.playnow span {\n    font-size: 15px;\n    width: 64px;\n    padding: 12px;\n}\n\n.seekbar {\n    height: 4px;\n    width: 98%;\n    background: black;\n    border-radius: 10px;\n    position: absolute;\n    bottom: 8px;\n    margin: 6px;\n    cursor: pointer;\n}\n\n.circle {\n    width: 13px;\n    height: 13px;\n    border-radius: 13px;\n    background-color: black;\n    position: relative;\n    bottom: 5px;\n    left: 0%;\n    transition: left 0.5s;\n}\n\n.songbuttons img {\n    cursor: pointer;\n}\n\n.timevol {\n    display: flex;\n    justify-content: space-evenly;\n    align-items: center;\n}\n\n\n.songinfo {\n    color: black;\n    padding: 0 12px;\n    width: 250px;\n}\n\n.songtime {\n    width: 125px;\n    color: black;\n    padding: 0 12px;\n}\n\n\n.volume {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    gap: 12px;\n    cursor: pointer;\n}\n.range input{\n    cursor: pointer;\n}\n\n.abovebar {\n    display: flex;\n    justify-content: space-between;\n    margin: 20px 0;\n    width: 100%;\n}\n\n@media (max-width: 1200px) {\n    .left {\n        position: absolute;\n        left: -130%;\n        transition: all .3s;\n        z-index: 1;\n        width: 373px;\n        background-color: black;\n        padding: 0;\n        height: 100vh;\n        position: fixed;\n        top: 0;\n    }\n\n    .songinfo,\n    .songtime {\n        width: auto;\n    }\n\n    .left .close {\n        position: absolute;\n        right: 31px;\n        top: 25px;\n        width: 29px;\n    }\n\n    .timevol {\n        display: flex;\n        justify-content: space-evenly;\n        align-items: center;\n        flex-direction: column;\n        gap: 13px;\n    }\n\n    .right {\n        width: 100vw;\n    }\n\n    .playbar {\n        width: calc(100vw - 75px); \n    }\n\n    .seekbar {\n        width: calc(100vw - 120px);\n    }\n\n    .hamburger {\n        display: block;\n    }\n\n    .right {\n        margin: 0;\n    }\n\n    .card {\n        width: 55vw;\n    }\n\n    .cardContainer {\n        margin: 0;\n        justify-content: center; \n    }\n\n    .close {\n        display: block;\n    }\n\n    .abovebar {\n        flex-direction: column;\n        gap: 23px;\n        align-items: center;\n    }\n\n    .cardContainer {\n        max-height: unset;\n        overflow-y: unset;\n        margin-bottom: 35vh;\n    }\n\n    .playbar{\n        right: 25px;\n    }\n}\n\n@media (max-width: 500px) {\n    .card {\n        width: 100%;\n    }\n\n    .header>* {\n        padding: 2px;\n    }\n\n    .buttons>* {\n        margin: 0 6px;\n    }\n\n    .header{\n        padding: 7px;\n    }\n\n    .spotifyPlaylists h1 {\n        padding: 4px;\n    }\n\n    .library{\n        height: 85vh;\n    }\n\n    .left{ \n        width: 100vw;\n    }\n\n \n\n    \n}"
  },
  {
    "path": "Video 84 - Project 2 - Spotify Clone/css/utility.css",
    "content": ".border{\n    border: 2px solid  red;\n    margin: 3px;\n}\n\n.flex{\n    display: flex;\n}\n\n.justify-center{\n    justify-content: center;\n}\n\n.items-center{\n    align-items: center;\n}\n\n.bg-black{\n    background-color: black;\n    color: white;\n}\n\n.invert{\n    filter: invert(1);\n}\n\n.bg-grey{\n    background-color: #121212;\n}\n\n.rounded{\n    border-radius: 7px;\n}\n\n.m-1{\n    margin: 5px;\n}\n\n.p-1{\n    padding: 10px;\n}\n\n\n/* For Webkit browsers (e.g., Chrome, Safari) */\n::-webkit-scrollbar {\n    width: 12px;\n  }\n  \n  ::-webkit-scrollbar-thumb {\n    background-color: #333; /* Dark color for the thumb */\n    border-radius: 6px;\n  }\n  \n  ::-webkit-scrollbar-track {\n    background-color: #222; /* Dark color for the track */\n  }\n  \n  /* For Firefox */\n  scrollbar-color: #333 #222; /* Dark color for the thumb and track in Firefox */\n  "
  },
  {
    "path": "Video 84 - Project 2 - Spotify Clone/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <link rel=\"stylesheet\" href=\"css/style.css\">\n    <link rel=\"stylesheet\" href=\"css/utility.css\">\n    <title>Spotify - Web Player: Music for everyone</title>\n</head>\n\n<body>\n    <div class=\"container flex bg-black\">\n        <div class=\"left\">\n            <div class=\"close\">\n                <img width=\"30\" class=\"invert\" src=\"img/close.svg\" alt=\"\">\n            </div>\n            <div class=\"home bg-grey rounded m-1 p-1\">\n                <div class=\"logo\"><img width=\"110\" class=\"invert\" src=\"img/logo.svg\" alt=\"\"></div>\n                <ul>\n                    <li><img class=\"invert\" src=\"img/home.svg\" alt=\"home\">Home</li>\n                    <li><img class=\"invert\" src=\"img/search.svg\" alt=\"home\">Search</li>\n                </ul>\n            </div>\n\n            <div class=\"library bg-grey rounded m-1 p-1\">\n                <div class=\"heading\">\n                    <img class=\"invert\" src=\"img/playlist.svg\" alt=\"\">\n                    <h2>\n                        Your Library\n                    </h2>\n                </div>\n\n                <div class=\"songList\">\n\n                    <ul>\n\n                    </ul>\n                </div>\n\n                <div class=\"footer\">\n                    <div><a href=\"https://www.spotify.com/jp/legal/\"><span>Legal</span></a></div>\n                    <div><a href=\"https://www.spotify.com/jp/privacy/\"><span>Privacy Center</span></a></div>\n                    <div><a href=\"https://www.spotify.com/jp/legal/privacy-policy/\"><span>Privacy Policy</span></a>\n                    </div>\n                    <div><a href=\"https://www.spotify.com/jp/legal/cookies-policy/\"><span>Cookies</span></a></div>\n                    <div><a href=\"https://www.spotify.com/jp/legal/privacy-policy/#s3\"><span>About Ads</span></a></div>\n                    <div><a href=\"https://www.spotify.com/jp/accessibility/\"><span>Accessibility</span></a></div>\n                </div>\n            </div>\n\n\n        </div>\n        <div class=\"right bg-grey rounded\">\n            <div class=\"header\">\n                <div class=\"nav\">\n                    <div class=\"hamburgerContainer\">\n\n                        <img width=\"40\" class=\"invert hamburger\" src=\"img/hamburger.svg\" alt=\"\">\n                        <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path\n                                d=\"M15 6L9.70711 11.2929C9.37377 11.6262 9.20711 11.7929 9.20711 12C9.20711 12.2071 9.37377 12.3738 9.70711 12.7071L15 18\"\n                                stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                        </svg>\n                        <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path\n                                d=\"M9 18L14.2929 12.7071C14.6262 12.3738 14.7929 12.2071 14.7929 12C14.7929 11.7929 14.6262 11.6262 14.2929 11.2929L9 6\"\n                                stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                        </svg>\n                    </div>\n                </div>\n                <div class=\"buttons\">\n                    <button class=\"signupbtn\">Sign up</button>\n                    <button class=\"loginbtn\">Log in</button>\n                </div>\n            </div>\n            <div class=\"spotifyPlaylists\">\n                <h1>Spotify Playlists</h1>\n                <div class=\"cardContainer\">  </div>\n                <div class=\"playbar\">\n                    <div class=\"seekbar\">\n                        <div class=\"circle\">\n\n                        </div>\n                    </div>\n                    <div class=\"abovebar\">\n\n\n                        <div class=\"songinfo\">\n\n                        </div>\n                        <div class=\"songbuttons\">\n                            <img width=\"35\" id=\"previous\" src=\"img/prevsong.svg\" alt=\"\">\n                            <img width=\"35\" id=\"play\" src=\"img/play.svg\" alt=\"\">\n                            <img width=\"35\" id=\"next\" src=\"img/nextsong.svg\" alt=\"\">\n                        </div>\n                        <div class=\"timevol\">\n\n                       \n                        <div class=\"songtime\">\n\n                        </div>\n                        <div class=\"volume\">\n                            <img width=\"25\" src=\"img/volume.svg\" alt=\"\">\n                            <div class=\"range\">\n                                <input type=\"range\" name=\"volume\" id=\"\">\n                            </div>\n                        </div>\n                    </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n    <script src=\"js/script.js\"></script>\n</body>\n\n</html>"
  },
  {
    "path": "Video 84 - Project 2 - Spotify Clone/js/script.js",
    "content": "console.log('Lets write JavaScript');\nlet currentSong = new Audio();\nlet songs;\nlet currFolder;\n\nfunction secondsToMinutesSeconds(seconds) {\n    if (isNaN(seconds) || seconds < 0) {\n        return \"00:00\";\n    }\n\n    const minutes = Math.floor(seconds / 60);\n    const remainingSeconds = Math.floor(seconds % 60);\n\n    const formattedMinutes = String(minutes).padStart(2, '0');\n    const formattedSeconds = String(remainingSeconds).padStart(2, '0');\n\n    return `${formattedMinutes}:${formattedSeconds}`;\n}\n\nasync function getSongs(folder) {\n    currFolder = folder;\n    let a = await fetch(`/${folder}/`)\n    let response = await a.text();\n    let div = document.createElement(\"div\")\n    div.innerHTML = response;\n    let as = div.getElementsByTagName(\"a\")\n    songs = []\n    for (let index = 0; index < as.length; index++) {\n        const element = as[index];\n        if (element.href.endsWith(\".mp3\")) {\n            songs.push(element.href.split(`/${folder}/`)[1])\n        }\n    }\n \n\n\n    // Show all the songs in the playlist\n    let songUL = document.querySelector(\".songList\").getElementsByTagName(\"ul\")[0]\n    songUL.innerHTML = \"\"\n    for (const song of songs) {\n        songUL.innerHTML = songUL.innerHTML + `<li><img class=\"invert\" width=\"34\" src=\"img/music.svg\" alt=\"\">\n                            <div class=\"info\">\n                                <div> ${song.replaceAll(\"%20\", \" \")}</div>\n                                <div>Harry</div>\n                            </div>\n                            <div class=\"playnow\">\n                                <span>Play Now</span>\n                                <img class=\"invert\" src=\"img/play.svg\" alt=\"\">\n                            </div> </li>`;\n    }\n\n    // Attach an event listener to each song\n    Array.from(document.querySelector(\".songList\").getElementsByTagName(\"li\")).forEach(e => {\n        e.addEventListener(\"click\", element => {\n            playMusic(e.querySelector(\".info\").firstElementChild.innerHTML.trim())\n\n        })\n    })\n\n    return songs\n}\n\nconst playMusic = (track, pause = false) => {\n    currentSong.src = `/${currFolder}/` + track\n    if (!pause) {\n        currentSong.play()\n        play.src = \"img/pause.svg\"\n    }\n    document.querySelector(\".songinfo\").innerHTML = decodeURI(track)\n    document.querySelector(\".songtime\").innerHTML = \"00:00 / 00:00\"\n\n\n}\n\nasync function displayAlbums() {\n    console.log(\"displaying albums\")\n    let a = await fetch(`/songs/`)\n    let response = await a.text();\n    let div = document.createElement(\"div\")\n    div.innerHTML = response;\n    let anchors = div.getElementsByTagName(\"a\")\n    let cardContainer = document.querySelector(\".cardContainer\")\n    let array = Array.from(anchors)\n    for (let index = 0; index < array.length; index++) {\n        const e = array[index]; \n        if (e.href.includes(\"/songs\") && !e.href.includes(\".htaccess\")) {\n            let folder = e.href.split(\"/\").slice(-2)[0]\n            // Get the metadata of the folder\n            let a = await fetch(`/songs/${folder}/info.json`)\n            let response = await a.json(); \n            cardContainer.innerHTML = cardContainer.innerHTML + ` <div data-folder=\"${folder}\" class=\"card\">\n            <div class=\"play\">\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\"\n                    xmlns=\"http://www.w3.org/2000/svg\">\n                    <path d=\"M5 20V4L19 12L5 20Z\" stroke=\"#141B34\" fill=\"#000\" stroke-width=\"1.5\"\n                        stroke-linejoin=\"round\" />\n                </svg>\n            </div>\n\n            <img src=\"/songs/${folder}/cover.jpg\" alt=\"\">\n            <h2>${response.title}</h2>\n            <p>${response.description}</p>\n        </div>`\n        }\n    }\n\n    // Load the playlist whenever card is clicked\n    Array.from(document.getElementsByClassName(\"card\")).forEach(e => { \n        e.addEventListener(\"click\", async item => {\n            console.log(\"Fetching Songs\")\n            songs = await getSongs(`songs/${item.currentTarget.dataset.folder}`)  \n            playMusic(songs[0])\n\n        })\n    })\n}\n\nasync function main() {\n    // Get the list of all the songs\n    await getSongs(\"songs/ncs\")\n    playMusic(songs[0], true)\n\n    // Display all the albums on the page\n    await displayAlbums()\n\n\n    // Attach an event listener to play, next and previous\n    play.addEventListener(\"click\", () => {\n        if (currentSong.paused) {\n            currentSong.play()\n            play.src = \"img/pause.svg\"\n        }\n        else {\n            currentSong.pause()\n            play.src = \"img/play.svg\"\n        }\n    })\n\n    // Listen for timeupdate event\n    currentSong.addEventListener(\"timeupdate\", () => {\n        document.querySelector(\".songtime\").innerHTML = `${secondsToMinutesSeconds(currentSong.currentTime)} / ${secondsToMinutesSeconds(currentSong.duration)}`\n        document.querySelector(\".circle\").style.left = (currentSong.currentTime / currentSong.duration) * 100 + \"%\";\n    })\n\n    // Add an event listener to seekbar\n    document.querySelector(\".seekbar\").addEventListener(\"click\", e => {\n        let percent = (e.offsetX / e.target.getBoundingClientRect().width) * 100;\n        document.querySelector(\".circle\").style.left = percent + \"%\";\n        currentSong.currentTime = ((currentSong.duration) * percent) / 100\n    })\n\n    // Add an event listener for hamburger\n    document.querySelector(\".hamburger\").addEventListener(\"click\", () => {\n        document.querySelector(\".left\").style.left = \"0\"\n    })\n\n    // Add an event listener for close button\n    document.querySelector(\".close\").addEventListener(\"click\", () => {\n        document.querySelector(\".left\").style.left = \"-120%\"\n    })\n\n    // Add an event listener to previous\n    previous.addEventListener(\"click\", () => {\n        currentSong.pause()\n        console.log(\"Previous clicked\")\n        let index = songs.indexOf(currentSong.src.split(\"/\").slice(-1)[0])\n        if ((index - 1) >= 0) {\n            playMusic(songs[index - 1])\n        }\n    })\n\n    // Add an event listener to next\n    next.addEventListener(\"click\", () => {\n        currentSong.pause()\n        console.log(\"Next clicked\")\n\n        let index = songs.indexOf(currentSong.src.split(\"/\").slice(-1)[0])\n        if ((index + 1) < songs.length) {\n            playMusic(songs[index + 1])\n        }\n    })\n\n    // Add an event to volume\n    document.querySelector(\".range\").getElementsByTagName(\"input\")[0].addEventListener(\"change\", (e) => {\n        console.log(\"Setting volume to\", e.target.value, \"/ 100\")\n        currentSong.volume = parseInt(e.target.value) / 100\n        if (currentSong.volume >0){\n            document.querySelector(\".volume>img\").src = document.querySelector(\".volume>img\").src.replace(\"mute.svg\", \"volume.svg\")\n        }\n    })\n\n    // Add event listener to mute the track\n    document.querySelector(\".volume>img\").addEventListener(\"click\", e=>{ \n        if(e.target.src.includes(\"volume.svg\")){\n            e.target.src = e.target.src.replace(\"volume.svg\", \"mute.svg\")\n            currentSong.volume = 0;\n            document.querySelector(\".range\").getElementsByTagName(\"input\")[0].value = 0;\n        }\n        else{\n            e.target.src = e.target.src.replace(\"mute.svg\", \"volume.svg\")\n            currentSong.volume = .10;\n            document.querySelector(\".range\").getElementsByTagName(\"input\")[0].value = 10;\n        }\n\n    })\n\n\n\n\n\n}\n\nmain() "
  },
  {
    "path": "Video 84 - Project 2 - Spotify Clone/songs/.htaccess",
    "content": "Options +Indexes\nIndexOptions FancyIndexing NameWidth=* DescriptionWidth=*\n"
  },
  {
    "path": "Video 84 - Project 2 - Spotify Clone/songs/Angry_(mood)/info.json",
    "content": "{\n    \"title\": \"Angry Mood\",\n    \"description\": \"Calm your Anger\"\n}"
  },
  {
    "path": "Video 84 - Project 2 - Spotify Clone/songs/Bright_(mood)/info.json",
    "content": "{\n    \"title\": \"Bright Songs\",\n    \"description\": \"Bright Songs for you\"\n}"
  },
  {
    "path": "Video 84 - Project 2 - Spotify Clone/songs/Chill_(mood)/info.json",
    "content": "{\n    \"title\": \"Just Chill\",\n    \"description\": \"Yes, Just Chill\"\n}"
  },
  {
    "path": "Video 84 - Project 2 - Spotify Clone/songs/Dark_(mood)/info.json",
    "content": "{\n    \"title\": \"Dark Horse\",\n    \"description\": \"Dark Songs for you\"\n}"
  },
  {
    "path": "Video 84 - Project 2 - Spotify Clone/songs/Diljit/info.json",
    "content": "{\n    \"title\": \"Diljit Dosanjh\",\n    \"description\": \"Diljit Dosanjh hits\"\n}"
  },
  {
    "path": "Video 84 - Project 2 - Spotify Clone/songs/Funky_(mood)/info.json",
    "content": "{\n    \"title\": \"Go Funky\",\n    \"description\": \"Lets go Funky\"\n}"
  },
  {
    "path": "Video 84 - Project 2 - Spotify Clone/songs/Love_(mood)/info.json",
    "content": "{\n    \"title\": \"I Love You\",\n    \"description\": \"Love is in the air\"\n}"
  },
  {
    "path": "Video 84 - Project 2 - Spotify Clone/songs/Uplifting_(mood)/info.json",
    "content": "{\n    \"title\": \"Get up\",\n    \"description\": \"You can do it!\"\n}"
  },
  {
    "path": "Video 84 - Project 2 - Spotify Clone/songs/cs/info.json",
    "content": "{\n    \"title\": \"Copyright Songs\",\n    \"description\": \"Cover Songs for you\"\n}"
  },
  {
    "path": "Video 84 - Project 2 - Spotify Clone/songs/karan aujla/info.json",
    "content": "{\n    \"title\": \"Karan Aujla\",\n    \"description\": \"Karan Aujla for you\"\n}"
  },
  {
    "path": "Video 84 - Project 2 - Spotify Clone/songs/ncs/info.json",
    "content": "{\n    \"title\": \"Sleep Songs\",\n    \"description\": \"Songs for you\"\n}"
  },
  {
    "path": "Video 85/myserver.js",
    "content": "// Further Reading: https://nodejs.org/en/learn/getting-started/introduction-to-nodejs\nconst http = require('node:http');\n\nconst hostname = '127.0.0.1';\nconst port = 3000;\n\nconst server = http.createServer((req, res) => {\n  res.statusCode = 200;\n  res.setHeader('Content-Type', 'text/plain');\n  res.end('Hello World\\n');\n});\n\nserver.listen(port, hostname, () => {\n  console.log(`Server running at http://${hostname}:${port}/`);\n});"
  },
  {
    "path": "Video 85/package.json",
    "content": "{\n  \"name\": \"spotify\",\n  \"version\": \"1.0.0\",\n  \"description\": \"This is a spotify clone for my app\",\n  \"main\": \"server.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\",\n    \"start\": \"node server.js\"\n  },\n  \"keywords\": [\n    \"spotify\",\n    \"music\"\n  ],\n  \"author\": \"Harry\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"express\": \"^4.18.2\",\n    \"slugify\": \"^1.6.6\"\n  }\n}\n"
  },
  {
    "path": "Video 85/server.js",
    "content": "var slugify = require('slugify')\n\nlet a = slugify('some string') // some-string\nconsole.log(a)\n\n// if you prefer something other than '-' as separator\nconst b = slugify('some st&&*(^%$$^^&ring', '_')  // some_string\nconsole.log(b)"
  },
  {
    "path": "Video 86/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n<body>\n    <script type=\"module\" src=\"mymodule.js\"></script> \n    <script type=\"module\" src=\"main.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "Video 86/main.js",
    "content": "// import {a, b, d} from \"./mymodule.js\"\n// console.log(a, b, d)\n\n\n// import harry from \"./mymodule.js\"\n// console.log(harry)\n\n// (function(exports, require, module, __filename, __dirname) {\n\n//     // Module code actually lives here\n  \n//   });\n\nconst a = require(\"./mymodule2.js\")\n\nconsole.log(a, __dirname, __filename)"
  },
  {
    "path": "Video 86/mymodule.js",
    "content": "export const a = 1 // named export\nexport const b = 2 // named export\nexport const c = 3 // named export\nexport const d = 4 // named export\nexport const e = 5 // named export\n \nconst obj = {\n    x: 5,\n    y: 7\n}\n\nexport default obj; // default export"
  },
  {
    "path": "Video 86/mymodule2.js",
    "content": "// module.exports = {\n//     a: 1,\n//     b:4\n// }\n\nlet c = 56;\nmodule.exports = c;"
  },
  {
    "path": "Video 86/package.json",
    "content": "{\n  \"name\": \"video-86\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\", \n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"keywords\": [],\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"dotenv\": \"^16.3.1\",\n    \"express\": \"^4.18.2\",\n    \"jsonwebtoken\": \"^9.0.2\"\n  }\n}\n"
  },
  {
    "path": "Video 87/aboutpath.js",
    "content": "import path from \"path\"\n\nlet myPath = \"C:\\\\Users\\\\iitia\\\\Downloads\\\\Sigma Web Development Course\\\\Sigma-Web-Dev-Course\\\\Video 87\\\\harry.txt\"\nconsole.log(path.extname(myPath))\n\nconsole.log(path.dirname(myPath))\nconsole.log(path.basename(myPath))\n\nconsole.log(path.join(\"c:/\", \"programs\\\\harry.txt\"))"
  },
  {
    "path": "Video 87/harry",
    "content": "harryroboharryrobo"
  },
  {
    "path": "Video 87/harry.txt",
    "content": "Harry is amazing and nice bouy\n\n\n\nthis is amazing promise\n\n\n\nthis is amazing promise\n\n\n\nthis is amazing promise\n\n\n\nthis is amazing promise\n\n\n\nthis is amazing promise\n\n\n\nthis is amazing promise\n\n\n\nthis is amazing promise\n\n\n\nthis is amazing promise"
  },
  {
    "path": "Video 87/harry2.txt",
    "content": "Harry is a good boy2"
  },
  {
    "path": "Video 87/main.js",
    "content": "const fs = require(\"fs\")\n// const fs = require(\"fs/promises\")\n \nconsole.log(\"starting\")\n// fs.writeFileSync(\"harry.txt\", \"Harry is a good boy\")\n\nfs.writeFile(\"harry2.txt\", \"Harry is a good boy2\", ()=>{\n    console.log(\"done\")\n    fs.readFile(\"harry2.txt\", (error, data)=>{\n        console.log(error, data.toString())\n    })\n})\n\nfs.appendFile(\"harry.txt\", \"harryrobo\", (e, d)=>{\n    console.log(d)\n})\n\nconsole.log(\"ending\")"
  },
  {
    "path": "Video 87/mainpromise.js",
    "content": "import fs from \"fs/promises\"\n\nlet a = await fs.readFile(\"harry.txt\")\n\nlet b = await fs.appendFile(\"harry.txt\", \"\\n\\n\\n\\nthis is amazing promise\")\nconsole.log(a.toString(), b)"
  },
  {
    "path": "Video 87/package.json",
    "content": "{\n  \"name\": \"video-87\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"main.js\",\n  \"type\":\"module\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"keywords\": [],\n  \"author\": \"\",\n  \"license\": \"ISC\"\n}\n"
  },
  {
    "path": "Video 88/Agenda.md",
    "content": "## Agenda:\n1. Why should we use express?\n2. Why Nodemon?\n3. Installing Express@4\n4. Request parameters and queries\n5. Static Files"
  },
  {
    "path": "Video 88/main.js",
    "content": "const express = require('express')\nconst app = express()\nconst port = 3000\n\napp.use(express.static('public'))\n\n// app.get or app.post or app.put or app.delete(path, handler)\napp.get('/', (req, res) => {\n    res.send('Hello World!')\n})\n\napp.get('/about', (req, res) => {\n    res.send('About us')\n})\n\napp.get('/contact', (req, res) => {\n    res.send('Hello contact me!')\n})\n\napp.get('/blog', (req, res) => {\n    res.send('Hello blog!')\n})\n\napp.get('/blog/:slug', (req, res) => {\n    // logic to fetch {slug} from the db\n    // For URL: http://localhost:3000/blog/intro-to-padosi?mode=dark&region=in\n    console.log(req.params) // will output { slug: 'intro-to-padosi' }\n    console.log(req.query) // will output { mode: 'dark', region: 'in' }\n\n    res.send(`hello ${req.params.slug}`)\n})\n\n// app.get('/blog/intro-to-js', (req, res) => {\n//     // logic to fetch intro to js from the db\n//     res.send('Hello intro-to-js!')\n// })\n\n// app.get('/blog/intro-to-python', (req, res) => {\n//     // logic to fetch intro to python from the db\n//     res.send('Hello intro-to-python!')\n// })\n\napp.listen(port, () => {\n    console.log(`Example app listening on port ${port}`)\n})"
  },
  {
    "path": "Video 88/package.json",
    "content": "{\n  \"name\": \"video-88\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"main.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"keywords\": [],\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"express\": \"^4.18.2\"\n  }\n}\n"
  },
  {
    "path": "Video 88/public/harry.txt",
    "content": "This is a public file"
  },
  {
    "path": "Video 89/Agenda.md",
    "content": "## Response, Request and Routers\n1. Handling post & other requests\n2. Chaining of requests\n3. Serving HTML files\n4. Installing Postman\n5. Express Router"
  },
  {
    "path": "Video 89/main.js",
    "content": "const express = require('express')\nconst blog = require('./routes/blog')\nconst shop = require('./routes/shop')\n \n\n\nconst app = express()\nconst port = 3000\n\napp.use(express.static(\"public\"))\napp.use('/blog', blog)\napp.use('/shop', shop)\n\napp.get('/', (req, res) => {\n    console.log(\"Hey its a get request\")\n    res.send('Hello World21!')\n}).post('/', (req, res) => {\n    console.log(\"Hey its a post request\")\n    res.send('Hello World post!')\n})\n\napp.put('/', (req, res) => {\n    console.log(\"Hey its a put request\")\n    res.send('Hello World put!')\n})\n\napp.get(\"/index\", (req, res) => {\n    console.log(\"Hey its index\")\n    res.sendFile('templates/index.html', { root: __dirname })\n})\n\napp.get(\"/api\", (req, res) => {\n    res.json({ a: 1, b: 2, c: 3, d: 4, name: [\"harry\", \"jerry\"] })\n})\n\napp.listen(port, () => {\n    console.log(`Example app listening on port ${port}`)\n})"
  },
  {
    "path": "Video 89/package.json",
    "content": "{\n  \"name\": \"video-89\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"main.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"keywords\": [],\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"express\": \"^4.18.2\"\n  }\n}\n"
  },
  {
    "path": "Video 89/public/mypage.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Testing Post Request</title>\n</head>\n<body>\n    <script>\n        async function testPost(){\n            let a = await fetch(\"/\", {method: \"PUT\"})\n            let b = await a.text()\n            console.log(b)\n        }\n\n        testPost()\n    </script>\n</body>\n</html>"
  },
  {
    "path": "Video 89/routes/blog.js",
    "content": "const express = require('express')\nconst router = express.Router()\n\n// define the home page route\nrouter.get('/', (req, res) => {\n  res.send('Blog home page')\n})\n\n// define the about route\nrouter.get('/about', (req, res) => {\n  res.send('About blog')\n})\n\n// define the about route\nrouter.get('/blogpost/:slug', (req, res) => {\n  res.send(`fetch the blogpost for ${req.params.slug}`)\n})\n\nmodule.exports = router"
  },
  {
    "path": "Video 89/routes/shop.js",
    "content": "const express = require('express')\nconst router = express.Router()\n\n// define the home page route\nrouter.get('/', (req, res) => {\n  res.send('Shop home page')\n})\n\n// define the about route\nrouter.get('/about', (req, res) => {\n  res.send('About shop')\n})\n \n\nmodule.exports = router"
  },
  {
    "path": "Video 89/templates/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n\n<body>\n    <b>Hey I am bold</b>\n    This is index.html\n</body>\n\n</html>"
  },
  {
    "path": "Video 90/logs.txt",
    "content": "1704316830132 is a GET1704316841989 is a GET1704316842152 is a GET1704316842312 is a GET1704316842481 is a GET1704316842626 is a GET1704316842785 is a GET1704316851270 is a GET\n1704316851427 is a GET\n1704316851586 is a GET\n1704316851743 is a GET\n1704316851897 is a GET\n1704316852051 is a GET\n1704316852202 is a GET\n1704316852355 is a GET\n1704316852510 is a GET\n1704316852681 is a GET\n1704316852876 is a GET\n1704316891185 is a GET\n1704316944655 is a GET\n1704317127807 is a GET\n1704317128091 is a GET\n1704317128263 is a GET\n1704317128432 is a GET\n1704317128579 is a GET\n"
  },
  {
    "path": "Video 90/main.js",
    "content": "const express = require('express')\nconst app = express()\nconst port = 3000\nconst blog = require('./routes/blog')\nconst fs = require(\"fs\")\n\n// app.use(express.static(\"public\"))\n\napp.use('/blog', blog)\n\n// Middleware 1 - Logger for our application\napp.use((req, res, next) => {\n    console.log(req.headers)\n    req.harry = \"I am harry bhai\";\n    fs.appendFileSync(\"logs.txt\", `${Date.now()} is a ${req.method}\\n`)\n    console.log(`${Date.now()} is a ${req.method}`)\n    // res.send(\"Hacked by Middlware 1\")\n    next()\n})\n\n// Middleware 2\napp.use((req, res, next) => {\n    console.log('m2')\n    req.harry = \"I am Rohan bhai\";\n    next()\n})\n\napp.get('/', (req, res) => {\n    res.send('Hello World!')\n})\n\napp.get('/about', (req, res) => {\n    res.send('Hello about!' + req.harry)\n})\n\napp.get('/contact', (req, res) => {\n    res.send('Hello contact!')\n})\n\napp.listen(port, () => {\n    console.log(`Example app listening on port ${port}`)\n})"
  },
  {
    "path": "Video 90/package.json",
    "content": "{\n  \"name\": \"video-90\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"keywords\": [],\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"express\": \"^4.18.2\"\n  }\n}\n"
  },
  {
    "path": "Video 90/public/harry.txt",
    "content": "Harry"
  },
  {
    "path": "Video 90/routes/blog.js",
    "content": "const express = require('express')\nconst router = express.Router()\n\n// Middleware that is specific to this router\nrouter.use((req, res, next) => {\n  console.log('Time: ', Date.now())\n  next()\n})\n\n\n// define the home page route\nrouter.get('/', (req, res) => {\n  res.send('Birds home page')\n})\n\n// define the about route\nrouter.get('/about', (req, res) => {\n  res.send('About birds')\n})\n\nmodule.exports = router"
  },
  {
    "path": "Video 91/index.js",
    "content": "// You have to write a Node.js program to clear clutter inside of a directory and organize the contents of that directory into different folders\n\n// for example, these files become:\n\n// 1. name.jpg\n// 2. name.png\n// 3. this.pdf \n// 4. harry.zip\n// 5. Rohan.zip\n// 6. cat.jpg \n// 7. harry.pdf\n\n// this: \n// jpg/name.jpg, jpg/cat.jpg \n// png/name.png \n// pdf/this.pdf pdf/harry.pdf\n// zip/harry.zip zip/Rohan.zip\n\n"
  },
  {
    "path": "Video 92/index.js",
    "content": "const express = require('express')\nconst app = express()\nconst port = 3000\n\napp.set('view engine', 'ejs');\n\n// https://github.com/mde/ejs/wiki/Using-EJS-with-Express\n\napp.get('/', (req, res) => {\n    let siteName = \"Adidas\"\n    let searchText = \"Search Now\"\n    let arr = [\"Hey\", 54, 65]\n    res.render(\"index\", { siteName: siteName, searchText: searchText, arr })\n})\n\napp.get('/blog/:slug', (req, res) => {\n    let blogTitle = \"Adidas why and when?\"\n    let blogContent = \"Its a very good brand\"\n    res.render(\"blogpost\", {blogTitle: blogTitle, blogContent: blogContent})\n})\n\napp.listen(port, () => {\n    console.log(`Example app listening on port ${port}`)\n})"
  },
  {
    "path": "Video 92/package.json",
    "content": "{\n  \"name\": \"video-92\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"keywords\": [],\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"ejs\": \"^3.1.9\",\n    \"express\": \"^4.18.2\"\n  }\n}\n"
  },
  {
    "path": "Video 92/views/index.ejs",
    "content": "<!doctype html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>Bootstrap demo</title>\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css\" rel=\"stylesheet\"\n        integrity=\"sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN\" crossorigin=\"anonymous\">\n</head>\n\n<body>\n\n\n    <%- include('navbar'); %>\n\n    <script src=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js\"\n        integrity=\"sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL\"\n        crossorigin=\"anonymous\"></script>\n</body>\n\n</html>"
  },
  {
    "path": "Video 92/views/navbar.ejs",
    "content": "<nav class=\"navbar navbar-expand-lg bg-body-tertiary\">\n    <div class=\"container-fluid\">\n        <a class=\"navbar-brand\" href=\"#\"><%= siteName %></a>\n        <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\"\n            data-bs-target=\"#navbarSupportedContent\" aria-controls=\"navbarSupportedContent\" aria-expanded=\"false\"\n            aria-label=\"Toggle navigation\">\n            <span class=\"navbar-toggler-icon\"></span>\n        </button>\n        <div class=\"collapse navbar-collapse\" id=\"navbarSupportedContent\">\n            <ul class=\"navbar-nav me-auto mb-2 mb-lg-0\">\n                <li class=\"nav-item\">\n                    <a class=\"nav-link active\" aria-current=\"page\" href=\"#\">Home</a>\n                </li>\n                <li class=\"nav-item\">\n                    <a class=\"nav-link\" href=\"#\">Link</a>\n                </li>\n                <li class=\"nav-item dropdown\">\n                    <a class=\"nav-link dropdown-toggle\" href=\"#\" role=\"button\" data-bs-toggle=\"dropdown\"\n                        aria-expanded=\"false\">\n                        Dropdown\n                    </a>\n                    <ul class=\"dropdown-menu\">\n                        \n                        <li>value is <%= arr[0] %> <a class=\"dropdown-item\" href=\"#\">Action</a></li>\n                        \n                    </ul>\n                </li>\n                <li class=\"nav-item\">\n                    <a class=\"nav-link disabled\" aria-disabled=\"true\">Disabled</a>\n                </li>\n            </ul>\n            <form class=\"d-flex\" role=\"search\">\n                <input class=\"form-control me-2\" type=\"search\" placeholder=\"<%= searchText %>\" aria-label=\"Search\">\n                <button class=\"btn btn-outline-success\" type=\"submit\">Search</button>\n            </form>\n        </div>\n    </div>\n</nav>"
  },
  {
    "path": "Video 93/index.js",
    "content": "// You have to write a Node.js program to clear clutter inside of a directory and organize the contents of that directory into different folders\n\n// for example, these files become:\n\n// 1. name.jpg\n// 2. name.png\n// 3. this.pdf \n// 4. harry.zip\n// 5. Rohan.zip\n// 6. cat.jpg \n// 7. harry.pdf\n\n// this: \n// jpg/name.jpg, jpg/cat.jpg \n// png/name.png \n// pdf/this.pdf pdf/harry.pdf\n// zip/harry.zip zip/Rohan.zip\n\nimport fs from \"fs/promises\"\nimport fsn from \"fs\"\nimport path from \"path\"\n\nconst basepath = \"C:\\\\Users\\\\iitia\\\\Downloads\\\\Sigma Web Development Course\\\\Sigma-Web-Dev-Course\\\\Video 93\"\n\nlet files = await fs.readdir(basepath)\n\nfor (const item of files) {\n    console.log(\"running for \", item)\n    let ext = item.split(\".\")[item.split(\".\").length - 1]\n    if (ext != \"js\" && ext != \"json\" && item.split(\".\").length > 1) {\n\n\n        if (fsn.existsSync(path.join(basepath, ext))) {\n            // Move the file to this directory if its not a js or json file\n            fs.rename(path.join(basepath, item), path.join(basepath, ext, item))\n        }\n        else {\n            fs.mkdir(ext)\n            fs.rename(path.join(basepath, item), path.join(basepath, ext, item))\n        }\n    }\n\n}"
  },
  {
    "path": "Video 93/package.json",
    "content": "{\n  \"name\": \"video-93\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"type\":\"module\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"keywords\": [],\n  \"author\": \"\",\n  \"license\": \"ISC\"\n}\n"
  },
  {
    "path": "Video 94/playground1.mongodb.js",
    "content": "\nuse('SigmaDatabase');\n\n// Insert a few documents into the courses collection.\ndb.getCollection('courses').insertMany([\n  {\n    \"name\": \"Python\",\n    \"Price\": 15000,\n    \"Instructor\": \"Alice\"\n  },\n  {\n    \"name\": \"JavaScript\",\n    \"Price\": 18000,\n    \"Instructor\": \"Bob\"\n  },\n  {\n    \"name\": \"C++\",\n    \"Price\": 22000,\n    \"Instructor\": \"Charlie\"\n  },\n  {\n    \"name\": \"Ruby\",\n    \"Price\": 17000,\n    \"Instructor\": \"David\"\n  },\n  {\n    \"name\": \"C#\",\n    \"Price\": 19000,\n    \"Instructor\": \"Eva\"\n  },\n  {\n    \"name\": \"Swift\",\n    \"Price\": 21000,\n    \"Instructor\": \"Frank\"\n  },\n  {\n    \"name\": \"Kotlin\",\n    \"Price\": 16000,\n    \"Instructor\": \"Grace\"\n  },\n  {\n    \"name\": \"PHP\",\n    \"Price\": 23000,\n    \"Instructor\": \"Hank\"\n  },\n  {\n    \"name\": \"TypeScript\",\n    \"Price\": 20000,\n    \"Instructor\": \"Ivy\"\n  },\n  {\n    \"name\": \"Go\",\n    \"Price\": 18000,\n    \"Instructor\": \"Jack\"\n  }\n]\n);\n \n// Print a message to the output window.\nconsole.log(`Done Inserting Data`);\n "
  },
  {
    "path": "Video 95/crud.mongodb.js",
    "content": "// CRUD Operation\nuse(\"CrudDb\")\n\n\n// Create Operation\ndb.createCollection(\"courses\")\n\n// db.courses.insertOne({\n//     name: \"Harrys web dev free course\",\n//     price: 0,\n//     assignments: 12,\n//     projects: 45\n// })\n\n// db.courses.insertMany([\n//     {\n//       \"name\": \"Python Masterclass\",\n//       \"price\": 0,\n//       \"assignments\": 10,\n//       \"projects\": 30\n//     },\n//     {\n//       \"name\": \"JavaScript Basics\",\n//       \"price\": 0,\n//       \"assignments\": 8,\n//       \"projects\": 20\n//     },\n//     {\n//       \"name\": \"C# for Beginners\",\n//       \"price\": 0,\n//       \"assignments\": 15,\n//       \"projects\": 40\n//     },\n//     {\n//       \"name\": \"Web Development Fundamentals\",\n//       \"price\": 0,\n//       \"assignments\": 12,\n//       \"projects\": 35\n//     },\n//     {\n//       \"name\": \"Java Programming Essentials\",\n//       \"price\": 0,\n//       \"assignments\": 14,\n//       \"projects\": 38\n//     },\n//     {\n//       \"name\": \"ReactJS Crash Course\",\n//       \"price\": 0,\n//       \"assignments\": 10,\n//       \"projects\": 25\n//     },\n//     {\n//       \"name\": \"SQL Simplified\",\n//       \"price\": 0,\n//       \"assignments\": 12,\n//       \"projects\": 30\n//     },\n//     {\n//       \"name\": \"Responsive Web Design\",\n//       \"price\": 0,\n//       \"assignments\": 10,\n//       \"projects\": 28\n//     },\n//     {\n//       \"name\": \"Node.js for Beginners\",\n//       \"price\": 0,\n//       \"assignments\": 13,\n//       \"projects\": 36\n//     },\n//     {\n//       \"name\": \"Frontend Development with Vue.js\",\n//       \"price\": 0,\n//       \"assignments\": 11,\n//       \"projects\": 32\n//     }\n//   ]\n//   )\n\n// READ\n// let a = db.courses.find({price: 0}) \n\n// console.log(a.toArray())\n\n// let b = db.courses.findOne({price: 0}) \n\n// console.log(b)\n\n// UPDATE\n\n// db.courses.updateOne({price: 0}, {$set:{price: 100}})\n\n// db.courses.updateMany({price: 0}, {$set:{price: 1000}})\n\n\n// DELETE\n\ndb.courses.deleteOne({price: 1000})\n\ndb.courses.deleteMany({price: 1000})\n\n// https://www.mongodb.com/docs/manual/reference/operator/query/"
  },
  {
    "path": "Video 96/main.js",
    "content": "// https://www.npmjs.com/package/mongodb\nimport mongoose from \"mongoose\";\nimport express from \"express\";\nimport { Todo } from \"./models/Todo.js\";\n\nlet conn = await mongoose.connect(\"mongodb://localhost:27017/todo\")\nconst app = express()\nconst port = 3000\n\napp.get('/', (req, res) => {\n\n    const todo = new Todo({  desc: \"Description of this todo\", isDone: false, days: Math.floor(Math.random() * 45 + 5* Math.random()) })\n    todo.save() \n    res.send('Hello World!')\n})\n\napp.get('/a', async (req, res) => { \n    let todo = await Todo.findOne({})\n    console.log(todo)\n    res.json({title: todo.title, desc: todo.desc})\n})\n\n\n\napp.listen(port, () => {\n    console.log(`Example app listening on port ${port}`)\n})"
  },
  {
    "path": "Video 96/models/Todo.js",
    "content": "import mongoose from \"mongoose\";\n\nconst TodoSchema = new mongoose.Schema({\n    title: {type: String, required: true, default: \"Hey\"},\n    desc: String,\n    isDone: Boolean,\n    days: Number\n});\n\nexport const Todo = mongoose.model('Todo', TodoSchema);\n"
  },
  {
    "path": "Video 96/package.json",
    "content": "{\n  \"name\": \"video-96\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\",\n    \"dev\": \"nodemon main.js\"\n  },\n  \"keywords\": [],\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"express\": \"^4.18.2\",\n    \"mongoose\": \"^8.0.4\"\n  }\n}\n"
  },
  {
    "path": "Video 97/main.js",
    "content": "// Generate a dummy data in this format in a collection called employees in a db called company\n\n// {\n//     name: \"Harry\",\n//     salary: 45000000,\n//     language: \"Python\",\n//     city: \"New York\",\n//     isManager: true\n// }\n\n// Generate 10 such records when a button called generate data is clicked!\n// Create an Express app with mongoose to acheive it\n// Everytime the button is clicked, you should clear the collection "
  },
  {
    "path": "Video 98/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>Document</title>\n  <link rel=\"stylesheet\" href=\"src/output.css\">\n</head>\n<body>\n\n    <nav class=\"bg-purple-700 text-white flex md:justify-between flex-col md:flex-row min-h-10 items-center\">\n      <div class=\"logo mx-auto md:mx-0\">\n        CodeWithHarry\n      </div>\n      <ul class=\"flex space-x-3 justify-center md:justify-normal\">\n        <li>Home</li>\n        <li>About</li>\n        <li>Contact Us</li>\n      </ul>\n    </nav>\n\n    <main>\n \n    </main>\n\n    <footer>\n\n    </footer>\n</body>\n</html>"
  },
  {
    "path": "Video 98/package.json",
    "content": "{\n  \"name\": \"video-98\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\",\n    \"build\": \"npx tailwindcss -i ./src/input.css -o ./src/output.css --watch\"\n  },\n  \"keywords\": [],\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"devDependencies\": {\n    \"tailwindcss\": \"^3.4.1\"\n  }\n}\n"
  },
  {
    "path": "Video 98/setup.md",
    "content": "## How to setup Tailwind CSS\n\nStep 1: Run the following commands\n\n``` \nnpm install -D tailwindcss\nnpx tailwindcss init\n```\n\nStep 2: Update tailwind.conf.js file to include this line:\n```\ncontent: [\"*.html\"],\n```\n\nStep 3: create src/input.css to include:\n```\n@tailwind base;\n@tailwind components;\n@tailwind utilities;\n```\n\nStep 4: Include the src/output.css file to your html\n\nStep 5: Run the following command:\n```\nnpx tailwindcss -i ./src/input.css -o ./src/output.css --watch\n```"
  },
  {
    "path": "Video 98/src/input.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;"
  },
  {
    "path": "Video 98/src/output.css",
    "content": "/*\n! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com\n*/\n\n/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n  box-sizing: border-box;\n  /* 1 */\n  border-width: 0;\n  /* 2 */\n  border-style: solid;\n  /* 2 */\n  border-color: #e5e7eb;\n  /* 2 */\n}\n\n::before,\n::after {\n  --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n7. Disable tap highlights on iOS\n*/\n\nhtml,\n:host {\n  line-height: 1.5;\n  /* 1 */\n  -webkit-text-size-adjust: 100%;\n  /* 2 */\n  -moz-tab-size: 4;\n  /* 3 */\n  -o-tab-size: 4;\n     tab-size: 4;\n  /* 3 */\n  font-family: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  /* 4 */\n  font-feature-settings: normal;\n  /* 5 */\n  font-variation-settings: normal;\n  /* 6 */\n  -webkit-tap-highlight-color: transparent;\n  /* 7 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n  margin: 0;\n  /* 1 */\n  line-height: inherit;\n  /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n  height: 0;\n  /* 1 */\n  color: inherit;\n  /* 2 */\n  border-top-width: 1px;\n  /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n  -webkit-text-decoration: underline dotted;\n          text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  font-size: inherit;\n  font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n  color: inherit;\n  text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font-family by default.\n2. Use the user's configured `mono` font-feature-settings by default.\n3. Use the user's configured `mono` font-variation-settings by default.\n4. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  /* 1 */\n  font-feature-settings: normal;\n  /* 2 */\n  font-variation-settings: normal;\n  /* 3 */\n  font-size: 1em;\n  /* 4 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n  font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n  text-indent: 0;\n  /* 1 */\n  border-color: inherit;\n  /* 2 */\n  border-collapse: collapse;\n  /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font-family: inherit;\n  /* 1 */\n  font-feature-settings: inherit;\n  /* 1 */\n  font-variation-settings: inherit;\n  /* 1 */\n  font-size: 100%;\n  /* 1 */\n  font-weight: inherit;\n  /* 1 */\n  line-height: inherit;\n  /* 1 */\n  color: inherit;\n  /* 1 */\n  margin: 0;\n  /* 2 */\n  padding: 0;\n  /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n  -webkit-appearance: button;\n  /* 1 */\n  background-color: transparent;\n  /* 2 */\n  background-image: none;\n  /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n  outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n  box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n  vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n  -webkit-appearance: textfield;\n  /* 1 */\n  outline-offset: -2px;\n  /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button;\n  /* 1 */\n  font: inherit;\n  /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n  display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n  margin: 0;\n}\n\nfieldset {\n  margin: 0;\n  padding: 0;\n}\n\nlegend {\n  padding: 0;\n}\n\nol,\nul,\nmenu {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\n\ndialog {\n  padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n  resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n  opacity: 1;\n  /* 1 */\n  color: #9ca3af;\n  /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n  opacity: 1;\n  /* 1 */\n  color: #9ca3af;\n  /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n  cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n\n:disabled {\n  cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n   This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n  display: block;\n  /* 1 */\n  vertical-align: middle;\n  /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n  max-width: 100%;\n  height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n\n[hidden] {\n  display: none;\n}\n\n*, ::before, ::after {\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-gradient-from-position:  ;\n  --tw-gradient-via-position:  ;\n  --tw-gradient-to-position:  ;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n}\n\n::backdrop {\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-gradient-from-position:  ;\n  --tw-gradient-via-position:  ;\n  --tw-gradient-to-position:  ;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n}\n\n.container {\n  width: 100%;\n}\n\n@media (min-width: 640px) {\n  .container {\n    max-width: 640px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container {\n    max-width: 768px;\n  }\n}\n\n@media (min-width: 1024px) {\n  .container {\n    max-width: 1024px;\n  }\n}\n\n@media (min-width: 1280px) {\n  .container {\n    max-width: 1280px;\n  }\n}\n\n@media (min-width: 1536px) {\n  .container {\n    max-width: 1536px;\n  }\n}\n\n.mx-auto {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n.flex {\n  display: flex;\n}\n\n.h-6 {\n  height: 1.5rem;\n}\n\n.h-4 {\n  height: 1rem;\n}\n\n.h-40 {\n  height: 10rem;\n}\n\n.h-1 {\n  height: 0.25rem;\n}\n\n.h-10 {\n  height: 2.5rem;\n}\n\n.min-h-10 {\n  min-height: 2.5rem;\n}\n\n.flex-col {\n  flex-direction: column;\n}\n\n.items-center {\n  align-items: center;\n}\n\n.justify-center {\n  justify-content: center;\n}\n\n.justify-between {\n  justify-content: space-between;\n}\n\n.justify-around {\n  justify-content: space-around;\n}\n\n.space-x-3 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-x-reverse: 0;\n  margin-right: calc(0.75rem * var(--tw-space-x-reverse));\n  margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)));\n}\n\n.bg-red-600 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(220 38 38 / var(--tw-bg-opacity));\n}\n\n.bg-purple-700 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(126 34 206 / var(--tw-bg-opacity));\n}\n\n.text-purple-900 {\n  --tw-text-opacity: 1;\n  color: rgb(88 28 135 / var(--tw-text-opacity));\n}\n\n.text-white {\n  --tw-text-opacity: 1;\n  color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n\n@media (min-width: 640px) {\n  .sm\\:bg-purple-700 {\n    --tw-bg-opacity: 1;\n    background-color: rgb(126 34 206 / var(--tw-bg-opacity));\n  }\n}\n\n@media (min-width: 768px) {\n  .md\\:mx-0 {\n    margin-left: 0px;\n    margin-right: 0px;\n  }\n\n  .md\\:flex-row {\n    flex-direction: row;\n  }\n\n  .md\\:justify-normal {\n    justify-content: normal;\n  }\n\n  .md\\:justify-between {\n    justify-content: space-between;\n  }\n\n  .md\\:bg-purple-700 {\n    --tw-bg-opacity: 1;\n    background-color: rgb(126 34 206 / var(--tw-bg-opacity));\n  }\n\n  .md\\:bg-slate-600 {\n    --tw-bg-opacity: 1;\n    background-color: rgb(71 85 105 / var(--tw-bg-opacity));\n  }\n}"
  },
  {
    "path": "Video 98/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\"*.html\"],\n  theme: {\n    extend: {},\n  },\n  plugins: [],\n}\n\n"
  },
  {
    "path": "Video 99/main.js",
    "content": "const express = require('express')\nconst app = express()\nconst mongoose = require('mongoose');\nconst Employee = require(\"./models/Employee\")\n\nconn = mongoose.connect('mongodb://127.0.0.1:27017/company');\nconst port = 3000\n\napp.set('view engine', 'ejs');\n\nconst getRandom = (arr)=>{\n    let rno = Math.floor(Math.random() * (arr.length - 1))\n    return arr[rno]\n}\n\n\napp.get('/', (req, res) => {\n    res.render('index', { foo: 'FOO' });\n})\n\napp.get('/generate', async (req, res) => {\n    // Clear the collection Employee\n    await Employee.deleteMany({}) \n    // Generate random data\n\n    let randomNames = ['Rohan', \"Sohan\", \"Mohan\", \"Sobhan\"]\n    let randomLang = [\"Python\", \"js\", \"C++\", \"Java\"]\n    let randomCities = [\"Bilaspur\", \"Moradabad\", \"Mysore\", \"Kolkata\"]\n    for (let index = 0; index < 10; index++) {\n        let e = await Employee.create({\n            name: getRandom(randomNames),\n            salary: Math.floor(Math.random() * 22000),\n            language: getRandom(randomLang),\n            city: getRandom(randomCities),\n            isManager: (Math.random()>0.5)?true:false\n        })\n        console.log(e)\n \n\n    }\n\n    res.render('index', { foo: 'FOO' });\n})\n\napp.listen(port, () => {\n    console.log(`Example app listening on port ${port}`)\n})"
  },
  {
    "path": "Video 99/models/Employee.js",
    "content": "const mongoose = require('mongoose');\n\nconst employeeSchema = new mongoose.Schema({\n    name: String,\n    salary: Number,\n    language: String,\n    city: String,\n    isManager: Boolean\n});\n\nconst Employee = mongoose.model('Employee', employeeSchema);\nmodule.exports = Employee"
  },
  {
    "path": "Video 99/package.json",
    "content": "{\n  \"name\": \"video-99\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"main.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"keywords\": [],\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"ejs\": \"^3.1.9\",\n    \"express\": \"^4.18.2\",\n    \"mongoose\": \"^8.0.4\"\n  }\n}\n"
  },
  {
    "path": "Video 99/question.md",
    "content": "// Generate a dummy data in this format in a collection called employees in a db called company\n\n// {\n//     name: \"Harry\",\n//     salary: 45000000,\n//     language: \"Python\",\n//     city: \"New York\",\n//     isManager: true\n// }\n\n// Generate 10 such records when a button called generate data is clicked!\n// Create an Express app with mongoose to acheive it\n// Everytime the button is clicked, you should clear the collection "
  },
  {
    "path": "Video 99/views/index.ejs",
    "content": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>Bootstrap demo</title>\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN\" crossorigin=\"anonymous\">\n  </head>\n  <body>\n    <nav class=\"navbar navbar-expand-lg bg-body-tertiary\">\n      <div class=\"container-fluid\">\n        <a class=\"navbar-brand\" href=\"#\">Navbar</a>\n        <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarSupportedContent\" aria-controls=\"navbarSupportedContent\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n          <span class=\"navbar-toggler-icon\"></span>\n        </button>\n        <div class=\"collapse navbar-collapse\" id=\"navbarSupportedContent\">\n          <ul class=\"navbar-nav me-auto mb-2 mb-lg-0\">\n            <li class=\"nav-item\">\n              <a class=\"nav-link active\" aria-current=\"page\" href=\"#\">Home</a>\n            </li>\n            <li class=\"nav-item\">\n              <a class=\"nav-link\" href=\"#\">Link</a>\n            </li>\n            <li class=\"nav-item dropdown\">\n              <a class=\"nav-link dropdown-toggle\" href=\"#\" role=\"button\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n                Dropdown\n              </a>\n              <ul class=\"dropdown-menu\">\n                <li><a class=\"dropdown-item\" href=\"#\">Action</a></li>\n                <li><a class=\"dropdown-item\" href=\"#\">Another action</a></li>\n                <li><hr class=\"dropdown-divider\"></li>\n                <li><a class=\"dropdown-item\" href=\"#\">Something else here</a></li>\n              </ul>\n            </li>\n            <li class=\"nav-item\">\n              <a class=\"nav-link disabled\" aria-disabled=\"true\">Disabled</a>\n            </li>\n          </ul>\n          <form class=\"d-flex\" role=\"search\">\n            <input class=\"form-control me-2\" type=\"search\" placeholder=\"Search\" aria-label=\"Search\">\n            <button class=\"btn btn-outline-success\" type=\"submit\">Search</button>\n          </form>\n        </div>\n      </div>\n    </nav>\n\n    <div id=\"carouselExample\" class=\"carousel slide\">\n      <div class=\"carousel-inner\">\n        <div class=\"carousel-item active\">\n          <img src=\"https://wallpapers.com/images/featured/beautiful-scenery-wnxju2647uqrcccv.jpg\" class=\"d-block w-100\" width=\"23\" height=\"433\" alt=\"...\">\n        </div>\n        <div class=\"carousel-item\">\n          <img src=\"https://wallpapers.com/images/featured/beautiful-scenery-wnxju2647uqrcccv.jpg\" class=\"d-block w-100\" width=\"23\" height=\"433\" alt=\"...\">\n        </div>\n        <div class=\"carousel-item\">\n          <img src=\"https://wallpapers.com/images/featured/beautiful-scenery-wnxju2647uqrcccv.jpg\" class=\"d-block w-100\" width=\"23\" height=\"433\" alt=\"...\">\n        </div>\n      </div>\n      <button class=\"carousel-control-prev\" type=\"button\" data-bs-target=\"#carouselExample\" data-bs-slide=\"prev\">\n        <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n        <span class=\"visually-hidden\">Previous</span>\n      </button>\n      <button class=\"carousel-control-next\" type=\"button\" data-bs-target=\"#carouselExample\" data-bs-slide=\"next\">\n        <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n        <span class=\"visually-hidden\">Next</span>\n      </button>\n    </div>\n\n\n    <div class=\"container\">\n      <button type=\"button\" class=\"btn btn-success\">Generate Now</button>\n    </div>\n    <script src=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js\" integrity=\"sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL\" crossorigin=\"anonymous\"></script>\n    <script>\n      document.querySelector(\".container>button\").addEventListener(\"click\", async ()=>{\n        console.log(\"Yes\")\n        let a = await fetch(\"/generate\")\n        let r = await a.json()\n        console.log(r)\n\n      })\n    </script>\n  </body>\n</html>"
  },
  {
    "path": "video 117/.eslintrc.cjs",
    "content": "module.exports = {\n  root: true,\n  env: { browser: true, es2020: true },\n  extends: [\n    'eslint:recommended',\n    'plugin:react/recommended',\n    'plugin:react/jsx-runtime',\n    'plugin:react-hooks/recommended',\n  ],\n  ignorePatterns: ['dist', '.eslintrc.cjs'],\n  parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },\n  settings: { react: { version: '18.2' } },\n  plugins: ['react-refresh'],\n  rules: {\n    'react/jsx-no-target-blank': 'off',\n    'react-refresh/only-export-components': [\n      'warn',\n      { allowConstantExport: true },\n    ],\n  },\n}\n"
  },
  {
    "path": "video 117/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n"
  },
  {
    "path": "video 117/README.md",
    "content": "# React + Vite\n\nThis template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.\n\nCurrently, two official plugins are available:\n\n- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh\n- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh\n"
  },
  {
    "path": "video 117/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" type=\"image/svg+xml\" href=\"/vite.svg\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Vite + React</title>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script type=\"module\" src=\"/src/main.jsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "video 117/package.json",
    "content": "{\n  \"name\": \"video-117\",\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"vite build\",\n    \"lint\": \"eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0\",\n    \"preview\": \"vite preview\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\"\n  },\n  \"devDependencies\": {\n    \"@types/react\": \"^18.2.55\",\n    \"@types/react-dom\": \"^18.2.19\",\n    \"@vitejs/plugin-react\": \"^4.2.1\",\n    \"eslint\": \"^8.56.0\",\n    \"eslint-plugin-react\": \"^7.33.2\",\n    \"eslint-plugin-react-hooks\": \"^4.6.0\",\n    \"eslint-plugin-react-refresh\": \"^0.4.5\",\n    \"vite\": \"^5.1.0\"\n  }\n}\n"
  },
  {
    "path": "video 117/src/App.css",
    "content": "#root {\n  max-width: 1280px;\n  margin: 0 auto;\n  padding: 2rem;\n  text-align: center;\n}\n\n.logo {\n  height: 6em;\n  padding: 1.5em;\n  will-change: filter;\n  transition: filter 300ms;\n}\n.logo:hover {\n  filter: drop-shadow(0 0 2em #646cffaa);\n}\n.logo.react:hover {\n  filter: drop-shadow(0 0 2em #61dafbaa);\n}\n\n@keyframes logo-spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  a:nth-of-type(2) .logo {\n    animation: logo-spin infinite 20s linear;\n  }\n}\n\n.card {\n  padding: 2em;\n}\n\n.read-the-docs {\n  color: #888;\n}\n"
  },
  {
    "path": "video 117/src/App.jsx",
    "content": "import { useState, useMemo } from 'react'\nimport reactLogo from './assets/react.svg'\nimport viteLogo from '/vite.svg'\nimport './App.css'\n\n\nconst nums = new Array(30_000_000).fill(0).map((_, i)=>{\n  return {\n    index: i,\n    isMagical: i===29_000_000\n  }\n})\n\n\nfunction App() {\n  const [count, setCount] = useState(0)\n  const [numbers, setNumbers] = useState(nums)\n\n  // const magical = numbers.find(item=>item.isMagical===true) // Expensive Computation\n  const magical = useMemo(() => numbers.find(item=>item.isMagical===true), [numbers])\n\n  return (\n    <>\n      <div>\n        <span>Magical number is {magical.index}</span>\n        <a href=\"https://vitejs.dev\" target=\"_blank\">\n          <img src={viteLogo} className=\"logo\" alt=\"Vite logo\" />\n        </a>\n        <a href=\"https://react.dev\" target=\"_blank\">\n          <img src={reactLogo} className=\"logo react\" alt=\"React logo\" />\n        </a>\n      </div>\n      <h1>Vite + React</h1>\n      <div className=\"card\">\n        <button onClick={() => {\n          setCount((count) => count + 1);\n          if(count == 10){\n            setNumbers(new Array(10_000_000).fill(0).map((_, i)=>{\n              return {\n                index: i,\n                isMagical: i===9_000_000\n              }\n            }))\n          }\n        \n        }}>\n          count is {count}\n        </button>\n        <p>\n          Edit <code>src/App.jsx</code> and save to test HMR\n        </p>\n      </div>\n      <p className=\"read-the-docs\">\n        Click on the Vite and React logos to learn more\n      </p>\n    </>\n  )\n}\n\nexport default App\n"
  },
  {
    "path": "video 117/src/index.css",
    "content": ":root {\n  font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;\n  line-height: 1.5;\n  font-weight: 400;\n\n  color-scheme: light dark;\n  color: rgba(255, 255, 255, 0.87);\n  background-color: #242424;\n\n  font-synthesis: none;\n  text-rendering: optimizeLegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\na {\n  font-weight: 500;\n  color: #646cff;\n  text-decoration: inherit;\n}\na:hover {\n  color: #535bf2;\n}\n\nbody {\n  margin: 0;\n  display: flex;\n  place-items: center;\n  min-width: 320px;\n  min-height: 100vh;\n}\n\nh1 {\n  font-size: 3.2em;\n  line-height: 1.1;\n}\n\nbutton {\n  border-radius: 8px;\n  border: 1px solid transparent;\n  padding: 0.6em 1.2em;\n  font-size: 1em;\n  font-weight: 500;\n  font-family: inherit;\n  background-color: #1a1a1a;\n  cursor: pointer;\n  transition: border-color 0.25s;\n}\nbutton:hover {\n  border-color: #646cff;\n}\nbutton:focus,\nbutton:focus-visible {\n  outline: 4px auto -webkit-focus-ring-color;\n}\n\n@media (prefers-color-scheme: light) {\n  :root {\n    color: #213547;\n    background-color: #ffffff;\n  }\n  a:hover {\n    color: #747bff;\n  }\n  button {\n    background-color: #f9f9f9;\n  }\n}\n"
  },
  {
    "path": "video 117/src/main.jsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App.jsx'\nimport './index.css'\n\nReactDOM.createRoot(document.getElementById('root')).render(\n  <React.StrictMode>\n    <App />\n  </React.StrictMode>,\n)\n"
  },
  {
    "path": "video 117/vite.config.js",
    "content": "import { defineConfig } from 'vite'\nimport react from '@vitejs/plugin-react'\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n  plugins: [react()],\n})\n"
  }
]