<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Shahzar Mazhar | Web Designer &amp; Developer]]></title><description><![CDATA[Hi, I am Shahzar, I love technology in every form and medium, learning new things every day, and constantly tackling new challenges.]]></description><link>https://blog.shahzar.in</link><generator>RSS for Node</generator><lastBuildDate>Thu, 23 Apr 2026 15:22:19 GMT</lastBuildDate><atom:link href="https://blog.shahzar.in/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[How to Add Stick-to-Bottom Features to Shadcn ScrollArea for Better Chat Interfaces]]></title><description><![CDATA[When building modern chat applications, one of the most crucial UX patterns is ensuring the scroll area automatically sticks to the bottom as new messages arrive. Users expect to see the latest messages without manually scrolling down every time. Whi...]]></description><link>https://blog.shahzar.in/how-to-add-stick-to-bottom-features-to-shadcn-scrollarea-for-better-chat-interfaces</link><guid isPermaLink="true">https://blog.shahzar.in/how-to-add-stick-to-bottom-features-to-shadcn-scrollarea-for-better-chat-interfaces</guid><category><![CDATA[shadcn-scroll-to-bottom]]></category><category><![CDATA[scroll-area]]></category><category><![CDATA[shadcn ui]]></category><category><![CDATA[vercel ai sdk]]></category><dc:creator><![CDATA[Shahzar Mazhar]]></dc:creator><pubDate>Tue, 02 Sep 2025 09:08:39 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1756803876436/c7a54a01-9fcb-40d7-87d2-4b8a1073c475.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When building modern chat applications, one of the most crucial UX patterns is ensuring the scroll area automatically sticks to the bottom as new messages arrive. Users expect to see the latest messages without manually scrolling down every time. While AI SDK's conversation components provide this functionality out of the box, they come with their own styling that doesn't always align with your design system.</p>
<h2 id="heading-the-challenge">The Challenge</h2>
<p>I was working on a chat interface using <a target="_blank" href="https://ui.shadcn.com/"><strong>shadcn/ui</strong></a> components to maintain design consistency across my application. The <a target="_blank" href="https://ui.shadcn.com/docs/components/scroll-area">shadcn ScrollArea</a> component provides beautiful, theme-aware scrollbars that integrate seamlessly with the overall design system. However, it lacks the stick-to-bottom functionality that's essential for chat interfaces.</p>
<p>The <a target="_blank" href="https://ai-sdk.dev/elements/components/conversation">AI SDK conversation components</a> do include this behaviour, but they come with stock scrollbars that don't match the polished aesthetic of shadcn components. This created a dilemma: sacrifice design consistency for functionality, or lose essential UX behavior for visual appeal.</p>
<h2 id="heading-the-solution-hybrid-approach">The Solution: Hybrid Approach</h2>
<p>Rather than choosing between design and functionality, I decided to extend the existing shadcn ScrollArea component to support both modes of operation:</p>
<blockquote>
<p>📝 <a target="_blank" href="https://gist.github.com/szmazhr/cac4c27121e79eaaf85e45e5fd7c6094"><strong>View the complete implementation on GitHub Gist</strong></a></p>
</blockquote>
<ol>
<li><p><strong>Default mode</strong>: Standard scrolling behaviour for general content</p>
</li>
<li><p><strong>Stick-to-bottom mode</strong>: Automatic bottom-sticking for chat interfaces</p>
</li>
</ol>
<p>This approach preserves the beautiful shadcn styling while adding the sophisticated scroll management needed for conversational UIs.</p>
<h2 id="heading-implementation-strategy">Implementation Strategy</h2>
<h3 id="heading-1-context-based-state-management">1. Context-Based State Management</h3>
<p>The first step was creating a React context to share scroll state across components:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">interface</span> ScrollAreaContextType {
  isAtBottom: <span class="hljs-built_in">boolean</span>;
  isNearBottom: <span class="hljs-built_in">boolean</span>;
  scrollToBottom: <span class="hljs-function">() =&gt;</span> <span class="hljs-built_in">void</span>;
}
</code></pre>
<p>This context provides three key pieces of information:</p>
<ul>
<li><p>Current scroll position relative to bottom</p>
</li>
<li><p>Programmatic scroll control</p>
</li>
<li><p>Near-bottom detection for UI optimisations</p>
</li>
</ul>
<h3 id="heading-2-external-library-integration">2. External Library Integration</h3>
<p>I leveraged the <code>use-stick-to-bottom</code> library, which handles the complex scroll event management and position calculations. The challenge was integrating this library's refs with Radix UI's ScrollArea primitive:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">const</span> mergedScrollRef = useCallback(
  <span class="hljs-function">(<span class="hljs-params">node: HTMLDivElement | <span class="hljs-literal">null</span></span>) =&gt;</span> {
    localContainerRef.current = node;

    <span class="hljs-keyword">if</span> (!libScrollRef) <span class="hljs-keyword">return</span>;
    <span class="hljs-keyword">if</span> (<span class="hljs-keyword">typeof</span> libScrollRef === <span class="hljs-string">"function"</span>) libScrollRef(node);
    <span class="hljs-keyword">else</span> (libScrollRef <span class="hljs-keyword">as</span> React.RefObject&lt;HTMLDivElement | <span class="hljs-literal">null</span>&gt;).current = node;
  },
  [libScrollRef],
);
</code></pre>
<p>This ref merging pattern ensures both the external library and our component maintain proper DOM references while avoiding conflicts.</p>
<h3 id="heading-3-mode-based-component-switching">3. Mode-Based Component Switching</h3>
<p>The enhanced ScrollArea component now accepts a <code>mode</code> prop that determines behaviour:</p>
<pre><code class="lang-typescript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">ScrollArea</span>(<span class="hljs-params">{ mode = "<span class="hljs-keyword">default</span>", ...props }: ScrollAreaProps</span>) </span>{
  <span class="hljs-keyword">if</span> (mode === <span class="hljs-string">"stick-to-bottom"</span>) {
    <span class="hljs-keyword">return</span> &lt;ScrollAreaBottomStick {...props} /&gt;;
  }

  <span class="hljs-keyword">return</span> &lt;StandardScrollArea {...props} /&gt;;
}
</code></pre>
<p>This preserves backward compatibility while adding new functionality.</p>
<h3 id="heading-4-smart-scroll-button">4. Smart Scroll Button</h3>
<p>The ScrollButton component demonstrates context usage by conditionally rendering based on scroll position:</p>
<pre><code class="lang-typescript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">ScrollButton</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> { isAtBottom, scrollToBottom } = useScrollArea();

  <span class="hljs-keyword">return</span> (
    !isAtBottom &amp;&amp; (
      &lt;Button onClick={scrollToBottom}&gt;
        &lt;ArrowDownIcon /&gt;
      &lt;/Button&gt;
    )
  );
}
</code></pre>
<p>This provides users with an intuitive way to jump back to the latest messages when they've scrolled up to read history.</p>
<h2 id="heading-key-technical-decisions">Key Technical Decisions</h2>
<h3 id="heading-ref-management-strategy">Ref Management Strategy</h3>
<p>One of the trickiest aspects was properly forwarding refs between multiple layers:</p>
<ul>
<li><p>Radix UI ScrollArea needs refs for scroll event handling</p>
</li>
<li><p>The stick-to-bottom library needs refs for position calculations</p>
</li>
<li><p>Our component might need refs for additional functionality</p>
</li>
</ul>
<p>The solution was a ref merging pattern that accommodates both function refs and object refs, ensuring compatibility across different ref patterns.</p>
<h3 id="heading-performance-optimisation">Performance Optimisation</h3>
<p>The implementation includes several performance optimisations:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">const</span> values = useMemo(<span class="hljs-function">() =&gt;</span> {
  <span class="hljs-keyword">return</span> {
    isNearBottom,
    isAtBottom,
    scrollToBottom,
  };
}, [isAtBottom, scrollToBottom, isNearBottom]);
</code></pre>
<p>Context values are memoized to prevent unnecessary re-renders of child components, and scroll event handlers are optimised within the external library.</p>
<h3 id="heading-error-boundaries">Error Boundaries</h3>
<p>The <code>useScrollArea</code> hook includes proper error handling to prevent runtime errors when used incorrectly:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">if</span> (!context) {
  <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(
    <span class="hljs-string">"useScrollArea must be used within a &lt;ScrollArea mode='stick-to-bottom'&gt;"</span>,
  );
}
</code></pre>
<p>This provides clear developer feedback and prevents silent failures.</p>
<h2 id="heading-usage-in-practice">Usage in Practice</h2>
<p>The enhanced component maintains the same API as the original shadcn ScrollArea while adding new capabilities:</p>
<pre><code class="lang-typescript"><span class="hljs-comment">// Standard scrolling (unchanged behavior)</span>
&lt;ScrollArea className=<span class="hljs-string">"h-96"</span>&gt;
  &lt;div&gt;Regular content&lt;/div&gt;
&lt;/ScrollArea&gt;

<span class="hljs-comment">// Chat interface with stick-to-bottom</span>
&lt;ScrollArea mode=<span class="hljs-string">"stick-to-bottom"</span> className=<span class="hljs-string">"h-96"</span>&gt;
  &lt;div className=<span class="hljs-string">"space-y-2"</span>&gt;
    {messages.map(<span class="hljs-function"><span class="hljs-params">msg</span> =&gt;</span> &lt;Message key={msg.id} {...msg} /&gt;)}
  &lt;/div&gt;
  &lt;ScrollButton /&gt;
&lt;/ScrollArea&gt;
</code></pre>
<h2 id="heading-results-and-benefits">Results and Benefits</h2>
<p>This solution delivers several key advantages:</p>
<p><strong>Design Consistency</strong>: Maintains shadcn's beautiful scrollbar styling and theme integration across the entire application.</p>
<p><strong>Enhanced UX</strong>: Provides smooth stick-to-bottom behaviour that users expect from modern chat interfaces.</p>
<p><strong>Developer Experience</strong>: Offers a simple, intuitive API that doesn't break existing code while adding powerful new functionality.</p>
<p><strong>Flexibility</strong>: The context system allows for custom scroll controls and behaviours beyond the basic ScrollButton.</p>
<p><strong>Performance</strong>: Optimised ref handling and memoization ensure smooth performance even with frequent content updates.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Building great user interfaces often requires bridging the gap between design systems and specialised functionality. By extending shadcn's ScrollArea component rather than replacing it, we preserved the design consistency that makes shadcn valuable while adding the behavioural sophistication needed for modern chat interfaces.</p>
<p>This pattern—extending existing design system components with new modes—is broadly applicable. It allows teams to maintain design consistency while adapting components for specialised use cases, creating a more cohesive and polished user experience.</p>
<p>The result is a chat interface that looks native to your design system while providing the smooth, intuitive scrolling behaviour users expect from professional applications.</p>
]]></content:encoded></item><item><title><![CDATA[A Beginner's Guide to Git: Everything You Need to Know]]></title><description><![CDATA[Are you new to Git and wondering what it is and why it's so important? Git is a free, open-source version control system that tracks changes in your project's source code. In this guide, we'll cover everything you need to know to get started with Git...]]></description><link>https://blog.shahzar.in/things-you-need-to-know-about-git</link><guid isPermaLink="true">https://blog.shahzar.in/things-you-need-to-know-about-git</guid><category><![CDATA[Git]]></category><category><![CDATA[Beginner Developers]]></category><dc:creator><![CDATA[Shahzar Mazhar]]></dc:creator><pubDate>Mon, 20 Feb 2023 06:28:08 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/842ofHC6MaI/upload/fd1ec02b45b115b5a40a2e91e99d2ac5.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Are you new to Git and wondering what it is and why it's so important? Git is a free, open-source version control system that tracks changes in your project's source code. In this guide, we'll cover everything you need to know to get started with Git, including why you should use it, how to install and set it up, and basic commands to initialise, add files, commit, and check status.</p>
<h3 id="heading-why-use-git">Why Use Git?</h3>
<p>Git is essential for modern software development. It allows you to keep track of changes and collaborate with others on your project. By using Git, you can easily revert to previous versions of your code, track who made changes and merge code from different developers. Git also provides a safe and efficient way to back up your code and share it with others.</p>
<h3 id="heading-how-to-install-git">How to Install Git?</h3>
<p>To install Git, visit the <a target="_blank" href="https://git-scm.com/downloads">official Git website</a> and download the latest version for your operating system. Follow the installation instructions, and Git will be ready to use on your computer.</p>
<h3 id="heading-how-to-set-up-git">How to Set Up Git?</h3>
<p>Once Git is installed, you need to set up your user name and email address, which will be used to identify you as the author of the changes you make. Open the terminal or command prompt and enter the following commands:</p>
<pre><code class="lang-bash">git config --global user.name <span class="hljs-string">"Your Name"</span>
git config --global user.email <span class="hljs-string">"your.email@example.com"</span>
</code></pre>
<h3 id="heading-how-to-initialise-a-git-repository">How to Initialise a Git Repository?</h3>
<p>To start using Git, you need to initialise a repository in your project's directory. Open the terminal or command prompt, navigate to your project's directory, and enter the following command:</p>
<pre><code class="lang-bash">git init
</code></pre>
<h3 id="heading-how-do-add-specific-files-to-the-staging-area">How do Add Specific Files to the Staging Area?</h3>
<p>Before you commit changes, you need to add files to the staging area, which is like a queue for files that will be committed. To add specific files, enter the following command:</p>
<pre><code class="lang-bash">git add file1.txt file2.js
</code></pre>
<p>Replace <code>file1.txt</code> and <code>file2.js</code> with the names of the files you want to add.</p>
<h3 id="heading-how-do-add-all-files-to-the-staging-area">How do Add All Files to the Staging Area?</h3>
<p>To add all files in the current directory to the staging area, enter the following command:</p>
<pre><code class="lang-bash">git add .
</code></pre>
<h3 id="heading-how-to-commit-changes">How to Commit Changes?</h3>
<p>Once you have added files to the staging area, you can commit them to the repository with a message that describes the changes you made. To commit changes, enter the following command:</p>
<pre><code class="lang-bash">git commit -m <span class="hljs-string">"Add new feature"</span>
</code></pre>
<p>Replace "Add new feature" with a description of the changes you made.</p>
<h3 id="heading-how-to-check-the-status-of-your-repository">How to Check the Status of Your Repository?</h3>
<p>To check the status of your repository, enter the following command:</p>
<pre><code class="lang-bash">git status
</code></pre>
<p>This command will show you which files are in the staging area, which files have been modified, and which files are not being tracked.</p>
<h3 id="heading-conclusion">Conclusion</h3>
<p>In this beginner's guide to Git, we covered the basics of what Git is, why you should use it, how to install and set it up, and basic commands to initialise, add files, commit, and check status. By using Git, you can effectively track changes, collaborate with others, and keep your code organised. However, there's much more to learn, so keep exploring the many features of Git to become a Git pro.</p>
<p>Now that you know the basics of Git, you can learn more about branching, merging, and other advanced features of Git. Check out the official Git documentation or online tutorials to continue your Git education. Happy coding!</p>
<p>For more insightful articles and guides, be sure to <a target="_blank" href="https://blog.shahzar.in">check out our blog!</a></p>
]]></content:encoded></item><item><title><![CDATA[Styling a link or make it look like a button]]></title><description><![CDATA[The web was founded on links. The idea that we can click/tap a link and navigate from one web page to another. 
Links in HTML even look different from regular text without any CSS styling at all.
<a href="https://example.com/">a link</a>


They are b...]]></description><link>https://blog.shahzar.in/styling-a-link-or-make-it-look-like-a-button</link><guid isPermaLink="true">https://blog.shahzar.in/styling-a-link-or-make-it-look-like-a-button</guid><category><![CDATA[Beginner Developers]]></category><category><![CDATA[CSS]]></category><category><![CDATA[Tutorial]]></category><dc:creator><![CDATA[Shahzar Mazhar]]></dc:creator><pubDate>Sun, 01 May 2022 10:43:13 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1651070454559/ip-_CL-bj.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The web was founded on links. The idea that we can click/tap a link and navigate from one web page to another. </p>
<p>Links in HTML even look different from regular text without any CSS styling at all.</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"https://example.com/"</span>&gt;</span>a link<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span>
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1651397361059/yHcqjjpEY.png" alt="default-anchor-tag" class="image--center mx-auto" /></p>
<p>They are blue (purple if visited). They are underlined. That’s a link in it’s purest form.</p>
<p>But what if we want to change things up a bit? Perhaps blue doesn’t work with your website’s design. Maybe you have an aversion to underlines. Whatever the reason, CSS lets us style links just we can any other element. All we need to do is <a target="_blank" href="https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Selectors">target the element in our stylesheet</a>.</p>
<p>Want to use a different color, remove the underline and make it all uppercase? Sure, why not?</p>
<pre><code class="lang-css"><span class="hljs-selector-tag">a</span> {
  <span class="hljs-attribute">color</span>: cyan;
  <span class="hljs-attribute">text-decoration</span>: none;
  <span class="hljs-attribute">text-transform</span>: uppercase;
}
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1651398266463/_8GrXAEkN.png" alt="cyan-non-underlined-uppercase-anchor-tag" class="image--center mx-auto" /></p>
<p>Now we’re cooking with gas! But why stop there? Let’s look at a few other ways we can style links to complete the experience.</p>
<h3 id="heading-style-each-link-state">Style Each Link State</h3>
<p>Links have different states, meaning they adapt when we interact with them on a webpage. There are three additional states of a link that are worth considering anytime we change the default style of links:</p>
<ul>
<li><strong>Link</strong> (<code>:link</code>): This is probably the least used, but it’s for styling <code>&lt;a&gt;</code> elements that have an href, rather than placeholder links.</li>
<li><strong>Visited</strong> (<code>:visited</code>): The appearance of a link that the user has clicked on the page before when the mouse cursor is not on top of it. The styles you can apply to <code>:visited</code> are <a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/CSS/:visited#Styling_restrictions">restricted</a> for security reasons.</li>
<li><strong>Hover</strong> (<code>:hover</code>): When the mouse cursor is place on top of the link without a click</li>
<li><strong>Active</strong> (<code>:active</code>): When the link is in the process of being clicked. It might be super quick, but this is when the mouse button has been depressed and before the click is over.</li>
<li><strong>Focus</strong> (<code>:focus</code>): Like <code>:hover</code> but where the link is selected using the Tab key on a keyboard. Hover and focus states are often styled together.</li>
</ul>
<p>Links seem like a simple concept, but boy do they have a lot going on—and CSS gives us some incredible power to customise the experience!</p>
<h2 id="heading-link-as-a-button">Link as a Button</h2>
<p>Like other HTML elements, CSS can add background colors and padding to links that allow us to create the appearance of a button. Here’s our link using those techniques:</p>
<p>But first, let's take a look at the wrong approach. The code snippet below leads to the targeted website when it is clicked.</p>
<pre><code class="lang-html">  <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"https://example.com//"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">button</span>&gt;</span>Example<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span>
</code></pre>
<p>However, this is not valid HTML.</p>
<blockquote>
<p>The <code>a</code> element can be wrapped around entire paragraphs, lists, tables, and so forth, even entire sections, so long as there is no interactive content within (e.g., buttons or other links). - (Source: <a target="_blank" href="https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-a-element">Web Hypertext Application Technology Working Group</a>)</p>
</blockquote>
<p>This is considered bad practice because it makes it unclear as to the user's intent.</p>
<p>Links are supposed to navigate the user to another part of the webpage or an external site. And buttons are supposed to perform a specific action like submitting a form.  </p>
<p>When you nest one inside the other, it makes it confusing as to what action you want performed. That is why it is best to not nest a button inside an anchor tag.</p>
<h3 id="heading-how-to-style-a-link-to-look-like-a-button-with-css">How to style a link to look like a button with CSS</h3>
<p>Lets take above code and change background color instead of font color, or set white color for font"</p>
<pre><code class="lang-css"><span class="hljs-selector-tag">a</span> {

  <span class="hljs-attribute">background-color</span>: cyan;
  <span class="hljs-attribute">color</span>: white;
}
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1651400336505/jiRBMpzSx.png" alt="cyan-background-non-underlined-uppercase-anchor-tag" class="image--center mx-auto" /></p>
<p>Lastly, we can add some padding around the text:</p>
<pre><code class="lang-css"><span class="hljs-selector-tag">a</span> {

  <span class="hljs-attribute">background-color</span>: cyan;
  <span class="hljs-attribute">color</span>: white;
  <span class="hljs-attribute">text-decoration</span>: none;
  <span class="hljs-attribute">text-transform</span>: uppercase;
  <span class="hljs-attribute">padding</span>: <span class="hljs-number">15px</span> <span class="hljs-number">25px</span>;
}
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1651401188028/Eqh6yUoE3.png" alt="Paddind Added" class="image--center mx-auto" /></p>
<p>Now we have an anchor tag that looks like a button.</p>
<p>We can also make this "button" be a little more interactive by changing the background color depending on the state of the link.</p>
<pre><code class="lang-css"><span class="hljs-selector-tag">a</span><span class="hljs-selector-pseudo">:hover</span>{
  <span class="hljs-attribute">background-color</span>:<span class="hljs-number">#01b6b6</span>;
}
</code></pre>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://codepen.io/shahzarmazhar/embed/PoQoJra?default-tab=css%2Cresult">https://codepen.io/shahzarmazhar/embed/PoQoJra?default-tab=css%2Cresult</a></div>
<p>We could get more intricate with the design, but this is just to show you the basics of styling a link like a button.</p>
<h3 id="heading-what-are-the-issues-with-this-approach">What are the issues with this approach?</h3>
<p>There is some debate whether it is good practice to style links as buttons. Some will argue that links should always look like links and buttons should look like buttons.</p>
<p>In the web book titled <a target="_blank" href="https://resilientwebdesign.com/">Resilient Web Design</a>, Jeremy Keith states that</p>
<blockquote>
<p>one material should not be used as a substitute for another, otherwise the end result is deceptive.</p>
</blockquote>
<p>Why did I bother to bring up this debate?</p>
<p>My goal is not to make you choose one side of the debate over another. I just want you to be aware of this ongoing discussion.</p>
<p><em>Happy Coding...</em></p>
]]></content:encoded></item><item><title><![CDATA[Completed Responsive Web Design by freeCodeCamp]]></title><description><![CDATA[Hi, I am Shahzar, I love technology in every form and medium, learning new things every day, and constantly tackling new challenges.
I am happy to announce that I have completed first course of freeCodeCamp's Curriculum i.e. Responsive Web Designing ...]]></description><link>https://blog.shahzar.in/responsiveweb-designing-success-post</link><guid isPermaLink="true">https://blog.shahzar.in/responsiveweb-designing-success-post</guid><category><![CDATA[freeCodeCamp.org]]></category><category><![CDATA[Frontend Development]]></category><category><![CDATA[HTML5]]></category><category><![CDATA[CSS]]></category><category><![CDATA[Certification]]></category><dc:creator><![CDATA[Shahzar Mazhar]]></dc:creator><pubDate>Mon, 18 Apr 2022 21:33:08 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1650312137300/bjv17TbYm.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hi, I am Shahzar, I love technology in every form and medium, learning new things every day, and constantly tackling new challenges.</p>
<p>I am happy to announce that I have completed first course of <a target="_blank" href="https://www.freecodecamp.org/learn">freeCodeCamp's Curriculum</a> i.e. Responsive Web Designing (RWD), and earned this <a target="_blank" href="https://www.freecodecamp.org/certification/ShahzarKibriya/responsive-web-design">certificate</a>.</p>
<p>Throughout the course we have to complete some projects to get certified. In <a target="_blank" href="https://www.freecodecamp.org/learn/responsive-web-design/responsive-web-design-projects/">RWD there was 5 projects</a>, here is the snapshot of the projects completed</p>
<p><br /></p>
<p><strong>1. Survey Form <a target="_blank" href="https://codepen.io/shahzarmazhar/full/PoEaOPP">view on CodePen</a></strong>
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1650315813387/d-odVi2oA.jpg" alt="FreeCodeCamp's Project | Restaurant Customer Satisfaction Survey Form" /></p>
<p><br /></p>
<p><strong>2. Tribute Page <a target="_blank" href="https://codepen.io/shahzarmazhar/full/RwxBRBW">view on CodePen</a></strong>
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1650315853342/ZUFIXI1zm.jpg" alt="FreeCodeCamp's Project | Tribute Page, Dr. A.P.J. Abdul Kalam" /></p>
<p><br /></p>
<p><strong>3. Technical Documentation Page <a target="_blank" href="https://codepen.io/shahzarmazhar/full/mdpzLNR">view on CodePen</a></strong>
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1650316474401/vYSo8q6BO.jpg" alt="FreeCodeCamp's Project | Technical Documentation Page" /></p>
<p><br /></p>
<p><strong>4. Product Landing Page <a target="_blank" href="https://codepen.io/shahzarmazhar/full/VwyEZrz">view on CodePen</a></strong>
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1650316957673/5xfMpHSKV.png" alt="FreeCodeCamp's Project | Product Landing Page" /></p>
<p><br /></p>
<p><strong>5. Personal Portfolio Web page <a target="_blank" href="https://codepen.io/shahzarmazhar/full/ZEvVLzg">view on CodePen</a></strong>
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1650316713888/OF6xEWd-S.png" alt="FreeCodeCamp's Project | Personal Portfolio Web page" /></p>
<p>This all is done with the help of <a target="_blank" href="https://www.freecodecamp.org">freeCodeCamp</a>, Thank you so much. </p>
<p>Now it is time to explore the JavaScript. And I will catch in the next post, till then bye bye, have a great day.</p>
]]></content:encoded></item><item><title><![CDATA[Tribute to Dr. A.P.J. Abdul Kalam]]></title><description><![CDATA[A few days ago, I decided to start sharing my web development journey with the public beyond GitHub. My previous project was a Survey Form.
About the Project
It is second  RWD project of FreeCodeCamp. Genuinely speaking it was way easier than the pre...]]></description><link>https://blog.shahzar.in/tribute-dr-apj-abdul-kalam</link><guid isPermaLink="true">https://blog.shahzar.in/tribute-dr-apj-abdul-kalam</guid><category><![CDATA[HTML5]]></category><category><![CDATA[CSS3]]></category><category><![CDATA[freeCodeCamp.org]]></category><dc:creator><![CDATA[Shahzar Mazhar]]></dc:creator><pubDate>Wed, 13 Apr 2022 18:37:26 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1649873619014/H1c7u7WJh.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A few days ago, I decided to start sharing my web development journey with the public beyond GitHub. My previous project was a <a target="_blank" href="https://shahzarmazhar.hashnode.dev/html-css-restaurant-customer-satisfaction-survey">Survey Form</a>.</p>
<h3 id="heading-about-the-project">About the Project</h3>
<p>It is second  <a target="_blank" href="https://www.freecodecamp.org/learn/responsive-web-design/responsive-web-design-projects/build-a-tribute-page">RWD project</a> of <a target="_blank" href="https://www.freecodecamp.org/">FreeCodeCamp</a>. Genuinely speaking it was way easier than the previous one i.e. <a target="_blank" href="https://shahzarmazhar.hashnode.dev/html-css-restaurant-customer-satisfaction-survey">Survey form</a>. Actually it should have to be done before survey form. If you are someone who is also learning from <a target="_blank" href="https://www.freecodecamp.org/">FreeCodeCamp</a> believe me you will done it in one shot. </p>
<p>Checkout the preview and feel free to go through the code. By the way, If you are someone who have to submit the same project, please first try it yourself.</p>
<iframe height="600" style="width:100%" src="https://codepen.io/shahzarmazhar/embed/RwxBRBW?default-tab=">
  See the Pen <a href="https://codepen.io/shahzarmazhar/pen/RwxBRBW">
  Dr. A.P.J. Abdul Kalam</a> by Shahzar Mazhar (<a href="https://codepen.io/shahzarmazhar">@shahzarmazhar</a>)
  on <a href="https://codepen.io">CodePen</a>.
</iframe>]]></content:encoded></item><item><title><![CDATA[[ HTML - CSS] Restaurant Customer Satisfaction Survey]]></title><description><![CDATA[As I share in the previous post I am learning web development form FreeCodeCamp and TheOdinProject, I have completed my first project of FreeCodeCamp, Survey Form, it was not the big deal but it makes me happy to share with you, and I decided to shar...]]></description><link>https://blog.shahzar.in/html-css-restaurant-customer-satisfaction-survey</link><guid isPermaLink="true">https://blog.shahzar.in/html-css-restaurant-customer-satisfaction-survey</guid><category><![CDATA[HTML5]]></category><category><![CDATA[CSS]]></category><category><![CDATA[survey]]></category><category><![CDATA[forms]]></category><category><![CDATA[Beginner Developers]]></category><dc:creator><![CDATA[Shahzar Mazhar]]></dc:creator><pubDate>Mon, 11 Apr 2022 15:35:59 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1649690857197/6NHCTQZeU.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As I share in the <a target="_blank" href="https://shahzarmazhar.hashnode.dev/html-css-windows-10-loading-screen">previous post</a> I am learning web development form <a target="_blank" href="https://www.freecodecamp.org/">FreeCodeCamp</a> and <a target="_blank" href="https://www.theodinproject.com/">TheOdinProject</a>, I have completed my first project of FreeCodeCamp, Survey Form, it was not the big deal but it makes me happy to share with you, and I decided to share everything about my coding journey.</p>
<h3 id="heading-about-the-project">About the project</h3>
<p>This is very simple survey form, nothing challenging except positioning submit button, I don't know why but I faced some difficulties at positioning that button. and on hover first I thought I will increase font size but then I  second thought scaling it up will work good and i followed the second thought. </p>
<iframe height="600" style="width:100%" src="https://codepen.io/shahzarmazhar/embed/PoEaOPP?default-tab=result">
  See the Pen <a href="https://codepen.io/shahzarmazhar/pen/PoEaOPP">
  Restaurant Customer Satisfaction Survey</a> by Shahzar Mazhar (<a href="https://codepen.io/shahzarmazhar">@shahzarmazhar</a>)
  on <a href="https://codepen.io">CodePen</a>.
</iframe>

<p>That said, what are your impressions?</p>
<p>I am open to any questions and constructive criticism.😊</p>
]]></content:encoded></item><item><title><![CDATA[[HTML-CSS] Windows 10 loading screen]]></title><description><![CDATA[I loved to code few years back when I was in High School, copy paste type coding it was fun that time. I have done many mini project like JavaScript clock, calculator, login form etc. but for collage study I left everything behind because I was told ...]]></description><link>https://blog.shahzar.in/html-css-windows-10-loading-screen</link><guid isPermaLink="true">https://blog.shahzar.in/html-css-windows-10-loading-screen</guid><category><![CDATA[CSS]]></category><category><![CDATA[HTML5]]></category><category><![CDATA[Windows]]></category><category><![CDATA[Beginner Developers]]></category><dc:creator><![CDATA[Shahzar Mazhar]]></dc:creator><pubDate>Sat, 09 Apr 2022 02:35:30 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1649698546258/F50YEgEZb.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I loved to code few years back when I was in High School, copy paste type coding it was fun that time. I have done many mini project like JavaScript clock, calculator, login form etc. but for collage study I left everything behind because I was told to make career in others field. but few days ago I decided come back for ever, I decided to learn everything from scratch because what I learned years back is maybe outdated and also I forgot most of the things. </p>
<p><em>Currently I am learning web development from <a target="_blank" href="https://www.freecodecamp.org/">FreeCodeCamp</a> and <a target="_blank" href="https://www.theodinproject.com/">TheOdinProject</a> under a week I have almost completed HTML and CSS next I will go for JavaScript etc. </em></p>
<p>Here I made Windows 10 animated loading screen by writing each and every line by myself <em>(and some help of VS Code)</em> , I thought, it would be nice to share with you and take some feedback.</p>
<h3 id="heading-about-the-project">About the Project</h3>
<p>When I started this I was thinking it would be very easy to do that just few lines of CSS code. I will add a <strong>box</strong> and <strong>a vertical and a horizontal line</strong> by using <strong>pseudo element</strong>, and will add few more <strong>transparent blocks</strong> with one visible pseudo element to mimic loading circle and add some rotation to transparent block with some delay to each.</p>
<p>I know it was not hard but adding perspective, don't ask about that it took double the time of whole code. and the solution was just adding the <code>perspective: 30vw;</code> to the parent element and <code>transform: rotateY(-30deg);</code> to the logo.</p>
<p>Anyway it is now completed, I love to hear some word from you. Also I am open to any questions and constructive criticism.😊</p>
<iframe height="500" style="width:100%" src="https://codepen.io/shahzarmazhar/embed/gOozQZR?default-tab=result">
  See the Pen <a href="https://codepen.io/shahzarmazhar/pen/gOozQZR">
  [HTML-CSS] Windows 10 loading screen</a> by Shahzar Mazhar (<a href="https://codepen.io/shahzarmazhar">@shahzarmazhar</a>)
  on <a href="https://codepen.io">CodePen</a>.
</iframe>

]]></content:encoded></item></channel></rss>