<?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[Stephin's Blog]]></title><description><![CDATA[A proficient Solution Engineer with expertise in web development, adept at crafting and executing effective web solutions that meet business needs.]]></description><link>https://blog.stephinreji.com</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1682649090636/PAJ0b2N5E.png</url><title>Stephin&apos;s Blog</title><link>https://blog.stephinreji.com</link></image><generator>RSS for Node</generator><lastBuildDate>Mon, 20 Apr 2026 15:53:10 GMT</lastBuildDate><atom:link href="https://blog.stephinreji.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Web forms simplified]]></title><description><![CDATA[Building something for the community 💡🚀
check it out at : https://formifyai.stephinreji.com
Lemme know your thoughts]]></description><link>https://blog.stephinreji.com/web-forms-simplified</link><guid isPermaLink="true">https://blog.stephinreji.com/web-forms-simplified</guid><category><![CDATA[forms]]></category><category><![CDATA[AI]]></category><category><![CDATA[webforms,]]></category><dc:creator><![CDATA[Stephin Reji]]></dc:creator><pubDate>Thu, 20 Jun 2024 07:09:31 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1718866991570/673cec58-2e70-45da-8d21-db6c178645dd.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Building something for the community 💡🚀</p>
<p>check it out at : <a target="_blank" href="https://t.co/TqpHOrrS8h">https://formifyai.stephinreji.com</a></p>
<p>Lemme know your thoughts</p>
<p><a target="_blank" href="https://formifyai.stephinreji.com"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1718866560778/14d49ba5-d37e-4666-9cd9-f8e8a55ab1ff.png" alt="formify AI" class="image--center mx-auto" /></a></p>
]]></content:encoded></item><item><title><![CDATA[Style Tags can be styled 😎]]></title><description><![CDATA[Indeed, you heard correctly! Style tags are also considered HTML tags, to which we can apply various styles.
Let's explore this further.
Go to your Favourite editor and paste the following code
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charse...]]></description><link>https://blog.stephinreji.com/style-tags-can-be-styled</link><guid isPermaLink="true">https://blog.stephinreji.com/style-tags-can-be-styled</guid><category><![CDATA[CSS]]></category><category><![CDATA[HTML5]]></category><dc:creator><![CDATA[Stephin Reji]]></dc:creator><pubDate>Wed, 05 Jul 2023 03:27:41 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/_yMciiStJyY/upload/770dd9b2a0e92409ef7aeee329fab161.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Indeed, you heard correctly! Style tags are also considered HTML tags, to which we can apply various styles.</p>
<p>Let's explore this further.</p>
<p>Go to your Favourite editor and paste the following code</p>
<pre><code class="lang-xml"><span class="hljs-meta">&lt;!DOCTYPE <span class="hljs-meta-keyword">html</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">html</span> <span class="hljs-attr">lang</span>=<span class="hljs-string">"en"</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">charset</span>=<span class="hljs-string">"UTF-8"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"viewport"</span> <span class="hljs-attr">content</span>=<span class="hljs-string">"width=device-width, initial-scale=1.0"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">title</span>&gt;</span>Edit CSS Live<span class="hljs-tag">&lt;/<span class="hljs-name">title</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">style</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"display: block;"</span>&gt;</span><span class="css">
        *{<span class="hljs-attribute">transition</span>: all <span class="hljs-number">0.2s</span>;}
        <span class="hljs-selector-tag">html</span>{
            <span class="hljs-attribute">background-color</span>: <span class="hljs-number">#bada55</span>; 
            <span class="hljs-attribute">font-size</span>: <span class="hljs-number">20px</span>;
        }
    </span><span class="hljs-tag">&lt;/<span class="hljs-name">style</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span>
</code></pre>
<p>In the code provided above, I have included a style attribute within the style tag. Now, when you execute this code, the content inside the style tag will be displayed in the browser with the applied styling, as demonstrated below.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1688525757684/b48c1a01-74a8-4059-b9a0-33c15f8ece23.png" alt class="image--center mx-auto" /></p>
<p>Cool right! but there is more.</p>
<p>What if I say you can edit the styles on the browser window 😳.</p>
<pre><code class="lang-xml"><span class="hljs-meta">&lt;!DOCTYPE <span class="hljs-meta-keyword">html</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">html</span> <span class="hljs-attr">lang</span>=<span class="hljs-string">"en"</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">charset</span>=<span class="hljs-string">"UTF-8"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"viewport"</span> <span class="hljs-attr">content</span>=<span class="hljs-string">"width=device-width, initial-scale=1.0"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">title</span>&gt;</span>Document<span class="hljs-tag">&lt;/<span class="hljs-name">title</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">style</span> <span class="hljs-attr">contenteditable</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"display: block;"</span>&gt;</span><span class="css">
        *{<span class="hljs-attribute">transition</span>: all <span class="hljs-number">0.2s</span>;}
        <span class="hljs-selector-tag">html</span>{
            <span class="hljs-attribute">background-color</span>: <span class="hljs-number">#bada55</span>;
            <span class="hljs-attribute">font-size</span>: <span class="hljs-number">20px</span>;
        }
    </span><span class="hljs-tag">&lt;/<span class="hljs-name">style</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span>
</code></pre>
<p>There is an attribute called "contenteditable" that can be added to the style tag, allowing us to edit the styles directly from our browser window, as demonstrated below.</p>
<p>Try changing the background color and font size, and you'll see what I mean.</p>
<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/stephin007/pen/OJajXJY">https://codepen.io/stephin007/pen/OJajXJY</a></div>
<p> </p>
<p>You can also add <code>"white-space: pre;"</code> alongside "contenteditable" to include the necessary whitespace wherever needed.</p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">style</span> <span class="hljs-attr">contenteditable</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"display: block; white-space: pre;"</span>&gt;</span>
</code></pre>
<p>Hope this quick tutorial helped you in some or the other way. Thankyou</p>
]]></content:encoded></item><item><title><![CDATA[Getting Started with Git Commands]]></title><description><![CDATA[Git is a popular and highly useful version control system that allows you to track changes made to your code and collaborate with others on the same project. It can be intimidating to get started with Git at first, but with a few basic commands, you ...]]></description><link>https://blog.stephinreji.com/getting-started-with-git-commands</link><guid isPermaLink="true">https://blog.stephinreji.com/getting-started-with-git-commands</guid><category><![CDATA[GitHub]]></category><category><![CDATA[Git]]></category><category><![CDATA[branch]]></category><category><![CDATA[init]]></category><dc:creator><![CDATA[Stephin Reji]]></dc:creator><pubDate>Thu, 15 Jun 2023 17:01:41 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/842ofHC6MaI/upload/6502846fc14666b1522ab161b7377c80.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Git is a popular and highly useful version control system that allows you to track changes made to your code and collaborate with others on the same project. It can be intimidating to get started with Git at first, but with a few basic commands, you can be up and running in no time.</p>
<p>Below are some of the most commonly used Git commands that you'll need to know to get started with Git:</p>
<h2 id="heading-git-init">Git Init</h2>
<p>The <code>git init</code> command is used to initialize a new Git repository. It creates a new directory for your project and sets up the necessary files for Git to track changes.</p>
<pre><code class="lang-bash">git init
</code></pre>
<h2 id="heading-git-add">Git Add</h2>
<p>The <code>git add</code> command is used to stage changes made to your files for the next commit. This tells Git that you want to include the changes in the next commit.</p>
<pre><code class="lang-bash">git add &lt;file&gt;
</code></pre>
<p>You can also use <code>git add .</code> to stage all changes in the current directory.</p>
<h2 id="heading-git-commit">Git Commit</h2>
<p>The <code>git commit</code> command is used to create a new commit with the changes that you've staged using <code>git add</code>.</p>
<pre><code class="lang-bash">git commit -m <span class="hljs-string">"Commit message"</span>
</code></pre>
<p>The <code>-m</code> flag is used to provide a short description of the changes made in the commit.</p>
<h2 id="heading-git-status">Git Status</h2>
<p>The <code>git status</code> command is used to display the current status of your repository. This shows which files have been changed, which have been staged using <code>git add</code>, and which have not been tracked by Git.</p>
<pre><code class="lang-bash">git status
</code></pre>
<h2 id="heading-git-log">Git Log</h2>
<p>The <code>git log</code> command is used to display a list of all commits that have been made to the repository. This allows you to see the history of your project and track changes made over time.</p>
<pre><code class="lang-bash">git <span class="hljs-built_in">log</span>
</code></pre>
<p>You can also use <code>git log --oneline</code> to display a simplified list of commits.</p>
<h2 id="heading-git-branch">Git Branch</h2>
<p>The <code>git branch</code> command is used to create a new branch in your Git repository. A branch allows you to work on a separate version of your project without affecting the master branch.</p>
<pre><code class="lang-bash">git branch &lt;branch-name&gt;
</code></pre>
<h2 id="heading-git-checkout">Git Checkout</h2>
<p>The <code>git checkout</code> command is used to switch between different branches in your Git repository.</p>
<pre><code class="lang-bash">git checkout &lt;branch-name&gt;
</code></pre>
<h2 id="heading-git-merge">Git Merge</h2>
<p>The <code>git merge</code> command is used to combine changes made in one branch with another branch. This allows you to merge changes made by you or your team members into the master branch.</p>
<pre><code class="lang-bash">git merge &lt;branch-name&gt;
</code></pre>
<p>There are many other Git commands that you'll want to explore and learn as you become more proficient with Git. However, with these basic commands, you'll have everything you need to get started with version control and collaborative development.</p>
]]></content:encoded></item><item><title><![CDATA[How to Verify your Commits in GitHub]]></title><description><![CDATA[When working with Git, ensuring the integrity and authenticity of commits is essential. One way to enhance the security of your Git commits is by using SSH (Secure Shell) for verification. SSH provides a secure connection between your local machine a...]]></description><link>https://blog.stephinreji.com/how-to-verify-your-commits-in-github</link><guid isPermaLink="true">https://blog.stephinreji.com/how-to-verify-your-commits-in-github</guid><category><![CDATA[Git]]></category><category><![CDATA[GitHub]]></category><category><![CDATA[commit]]></category><category><![CDATA[verified]]></category><category><![CDATA[Gitcommands]]></category><dc:creator><![CDATA[Stephin Reji]]></dc:creator><pubDate>Fri, 09 Jun 2023 05:55:02 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1622055091880/1y8MOd_ho.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When working with Git, ensuring the integrity and authenticity of commits is essential. One way to enhance the security of your Git commits is by using SSH (Secure Shell) for verification. SSH provides a secure connection between your local machine and the remote Git repository, allowing you to verify the authenticity of the commits made by other contributors. In this guide, we'll walk through the process of verifying Git commits using SSH.</p>
<h2 id="heading-prerequisites">Prerequisites</h2>
<p>Before you begin, make sure you have the following:</p>
<ol>
<li><p>Git is installed on your local machine.</p>
</li>
<li><p>An SSH key pair is generated on your local machine.</p>
</li>
<li><p>Access to a remote Git repository that supports SSH authentication.</p>
</li>
</ol>
<p>If you don't have an SSH key pair, you can generate one by following the official documentation for your operating system.</p>
<h2 id="heading-step-1-configure-ssh-for-git">Step 1: Configure SSH for Git</h2>
<ol>
<li><p>Open your terminal or command prompt.</p>
</li>
<li><p>Set up your SSH key with Git by running the following command:</p>
<pre><code class="lang-shell"> $ git config --global user.signingkey &lt;your_key_id&gt;
</code></pre>
<p> Replace <code>&lt;your_key_id&gt;</code> with the identifier of your SSH key. This key will be used for signing and verifying commits.</p>
</li>
<li><p>Verify that the <code>gpg.program</code> configuration is set to <code>gpg</code> by running:</p>
<pre><code class="lang-shell"> $ git config --global gpg.program gpg
</code></pre>
<p> This ensures that Git uses the <code>gpg</code> command-line tool for signing and verifying commits.</p>
</li>
</ol>
<h2 id="heading-step-2-import-your-public-key-to-the-remote-repository">Step 2: Import Your Public Key to the Remote Repository</h2>
<ol>
<li><p>Obtain your SSH public key by running the following command:</p>
<pre><code class="lang-shell"> $ cat ~/.ssh/id_rsa.pub
</code></pre>
<p> This command prints your public key to the terminal.</p>
</li>
<li><p>Copy the output of the previous command, which represents your public key.</p>
</li>
<li><p>Access your remote Git repository (e.g., GitHub, GitLab, Bitbucket) and navigate to your account settings.</p>
</li>
<li><p>Look for the SSH key settings and add a new SSH key.</p>
</li>
<li><p>Paste your public key into the designated input field and save the changes.</p>
</li>
</ol>
<h2 id="heading-step-3-verify-a-git-commit">Step 3: Verify a Git Commit</h2>
<ol>
<li><p>Clone the repository that contains the commit you want to verify:</p>
<pre><code class="lang-shell"> $ git clone &lt;repository_url&gt;
</code></pre>
<p> Replace <code>&lt;repository_url&gt;</code> with the URL of the remote repository.</p>
</li>
<li><p>Change into the repository's directory:</p>
<pre><code class="lang-shell"> $ cd &lt;repository_directory&gt;
</code></pre>
<p> Replace <code>&lt;repository_directory&gt;</code> with the name of the local repository directory.</p>
</li>
<li><p>Fetch the latest commits:</p>
<pre><code class="lang-plaintext"> $ git fetch
</code></pre>
</li>
<li><p>Verify the commit by running the following command:</p>
<pre><code class="lang-shell"> $ git verify-commit &lt;commit_sha&gt;
</code></pre>
<p> Replace <code>&lt;commit_sha&gt;</code> with the SHA-1 hash of the commit you want to verify. You can find the commit's hash by checking the commit history.</p>
<p> If the commit is valid and has a valid signature, Git will display a "Good signature" message. Otherwise, it will indicate that the commit is invalid or not signed.</p>
</li>
</ol>
<p>Congratulations! You have successfully verified a Git commit using SSH. This ensures the authenticity and integrity of the commit, providing an extra layer of security to your development workflow.</p>
<p>Remember to follow best practices for securely storing and managing your SSH key pair to maintain the security of your Git commits.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>In this blog post, we explored the process of verifying Git commits using SSH. By configuring SSH for Git, importing your public key to the remote repository, and leveraging Git's verification commands, you can ensure the authenticity and integrity of your commits. Incorporating SSH-based verification into your Git workflow enhances security and helps build trust in the codebase.</p>
]]></content:encoded></item><item><title><![CDATA[Nurturing a Follow-Up Culture: The Key to Success in Corporates]]></title><description><![CDATA[Introduction
In the fast-paced world of corporate environments, effective communication and timely follow-ups can make all the difference. A follow-up culture refers to the practice of consistently following up on tasks, projects, and commitments wit...]]></description><link>https://blog.stephinreji.com/follow-up-culture-the-key-to-success-in-corporates</link><guid isPermaLink="true">https://blog.stephinreji.com/follow-up-culture-the-key-to-success-in-corporates</guid><category><![CDATA[ Follow-up culture]]></category><category><![CDATA[Corporate communication]]></category><category><![CDATA[Accountability in the workplace]]></category><category><![CDATA[Building trust in organizations]]></category><category><![CDATA[Effective collaboration]]></category><dc:creator><![CDATA[Stephin Reji]]></dc:creator><pubDate>Wed, 31 May 2023 04:13:58 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/szrJ3wjzOMg/upload/c19ffe3cbeee82bac6c9c08b52acf780.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction">Introduction</h2>
<p>In the fast-paced world of corporate environments, effective communication and timely follow-ups can make all the difference. A follow-up culture refers to the practice of consistently following up on tasks, projects, and commitments within an organization. It is a vital aspect of organizational success, as it ensures accountability, enhances productivity and strengthens professional relationships. In this blog post, we will delve into the significance of fostering a follow-up culture in corporates and explore strategies to implement it effectively.</p>
<ol>
<li><strong>Accountability and Efficiency:</strong></li>
</ol>
<p>A follow-up culture promotes accountability by ensuring that tasks and projects progress smoothly. When individuals consistently follow up on their commitments, it becomes clear who is responsible for each task and what progress has been made. This level of transparency fosters a sense of ownership, leading to increased productivity and efficiency.</p>
<ol>
<li><strong>Building Trust and Professionalism:</strong></li>
</ol>
<p>Consistent follow-ups demonstrate professionalism and reliability. When employees take the initiative to follow up on their commitments, it conveys a sense of dedication and attentiveness to details. This behaviour builds trust among team members, clients, and stakeholders, as it showcases a genuine interest in fulfilling obligations and delivering results.</p>
<ol>
<li><strong>Effective Communication and Collaboration:</strong></li>
</ol>
<p>One of the primary benefits of a follow-up culture is the facilitation of effective communication and collaboration. Regular follow-ups provide opportunities for team members to share progress updates, clarify doubts, and seek feedback. They promote open lines of communication and ensure that everyone involved is on the same page.</p>
<ol>
<li><strong>Client Satisfaction and Retention:</strong></li>
</ol>
<p>A strong follow-up culture is particularly crucial when it comes to client interactions. Clients appreciate timely responses and regular updates on the status of their projects. By maintaining a consistent follow-up practice, organizations can exceed client expectations, ensuring their satisfaction and increasing the likelihood of repeat business.</p>
<h2 id="heading-strategies-for-implementing-a-follow-up-culture">Strategies for Implementing a Follow-Up Culture</h2>
<p>a. <strong>Clear Communication Channels:</strong> Establish clear channels for communication within the organization. Utilize project management tools, email, instant messaging platforms, or dedicated communication software to streamline the process.</p>
<p>b. <strong>Set Expectations:</strong> Clearly define expectations regarding follow-ups for each project or task. Include follow-up deadlines and ensure that all team members are aware of these expectations.</p>
<p>c. <strong>Document and Track:</strong> Maintain a centralized system for documenting and tracking follow-ups. This could include task management software, shared calendars, or spreadsheets. Regularly review and update these records to stay organized and accountable.</p>
<p>d. <strong>Lead by Example:</strong> Encourage leaders and managers to lead by example. Consistently demonstrate the importance of follow-ups through their actions and hold everyone accountable for their commitments.</p>
<p>e. <strong>Provide Training and Support:</strong> Offer training sessions or workshops on effective communication and follow-up practices. Provide resources and support to help employees develop and refine their follow-up skills.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>A follow-up culture is not just a mere formality in corporate settings; it is an integral part of fostering a productive and thriving work environment. By prioritizing accountability, trust, effective communication, and client satisfaction, organizations can unlock the full potential of their teams. Implementing strategies to cultivate a follow-up culture will not only improve efficiency and productivity but also strengthen professional relationships and set the stage for long-term success.</p>
]]></content:encoded></item><item><title><![CDATA[How to deploy multiple sites to firebase hosting?]]></title><description><![CDATA[Wait, what..is that even possible... Cause one project in firebase means only one hosting for that particular project, Right..!
Well, my fellow reader, Firebase has this feature to deploy multiple sites in a single firebase hosting. You might be wond...]]></description><link>https://blog.stephinreji.com/how-to-deploy-multiple-sites-to-firebase-hosting</link><guid isPermaLink="true">https://blog.stephinreji.com/how-to-deploy-multiple-sites-to-firebase-hosting</guid><category><![CDATA[Firebase]]></category><category><![CDATA[hosting]]></category><dc:creator><![CDATA[Stephin Reji]]></dc:creator><pubDate>Sun, 03 Jan 2021 18:21:49 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1609694698942/JNSLgeHJU.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Wait, what..is that even possible... Cause one project in firebase means only one hosting for that particular project, Right..!
Well, my fellow reader, Firebase has this feature to deploy multiple sites in a single firebase hosting. You might be wondering why do we need multiple websites for a single project, yeah I thought that too, so apparently, there might be situations, in which the user might need 2 separate apps i.e. one for customers, one for admin employees - both of which share the same database and functions.</p>
<p> In this blog, let me walk through the steps which you will need to follow strictly to deploy the sites correctly to their respective domains.</p>
<blockquote>
<h4 id="note-i-assume-that-you-have-already-deployed-one-of-your-apps-to-your-firebase-project-otherwise-you-wont-be-able-to-deploy-multiple-sites"><em><strong>NOTE: I ASSUME THAT YOU HAVE ALREADY DEPLOYED ONE OF YOUR APPS TO YOUR FIREBASE PROJECT, OTHERWISE, YOU WON'T BE ABLE TO DEPLOY MULTIPLE SITES</strong></em></h4>
</blockquote>
<p>Great, I hope you are still with me, Lets Begin.</p>
<h2 id="1-define-your-site-names">1 Define Your Site Name(s)</h2>
<p>Assume, there is an e-commerce vendor, whose consumer app is done and deployed on firebase, now you are working on the admin site for the vendor which will help the user to add products to his e-commerce website.</p>
<ul>
<li>In the Firebase Hosting Console, scroll to the bottom under the <strong>Advanced Section</strong> you will find an option to <em>Add Another Site</em> , When you click that, you will see the below screen.</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1609696086198/nuTKbffL8.png" alt="multisite-hosting.png" /></p>
<ul>
<li>Add the site name for ex:  <em>admin-multi-site-magic</em> , then you will see the site will be added like this.
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1609696215168/RCnnQS150.png" alt="multi-siteimage2.png" /></li>
</ul>
<p>Wait, it's not over yet, you have just added the site, you have not deployed anything to your new site, lets see how that's done</p>
<h2 id="2-install-the-latest-firebase-tools-and-initialize-hosting">2 Install the latest Firebase Tools and Initialize hosting</h2>
<p>You need Firebase Tools v4.2 or later for multisite hosting.</p>
<pre><code>npm i -g firebase-<span class="hljs-symbol">tools@</span>latest
firebase -v

firebase <span class="hljs-keyword">init</span> hosting
</code></pre><ul>
<li><p>One thing to note here, to make sure you add the word <em>hosting</em> in the last command since firebase has a lot of functions so when you add hosting after init, it will understand that it needs to only initialize the hosting.</p>
</li>
<li><p>It will prompt you some questions to select the project where you want to host it, make sure to select the correct project.</p>
</li>
</ul>
<h2 id="3-update-the-firebasejson">3 Update the firebase.json</h2>
<p>As soon as you complete the above step, you will see that firebase adds 2 files to your project directory i.e. <code>.firebaserc</code> <code>firebase.json</code></p>
<p>Now we just need to update this <code>firebase.json</code> by adding a field called <code>target</code>. Firebase uses this target, (yes you guessed it probably) to target the site to which your code needs to be deployed.</p>
<p>If you are using React, your deployable code will be your <code>build</code> folder
and If you are using Angular, your deployable code will be your <code>dist</code> folder.
The name of the target can be anything, but better to keep it relevant to the site you are about to deploy. Add your target file as shown below, just above the public field</p>
<pre><code>{
  <span class="hljs-attr">"hosting"</span>: {
    <span class="hljs-attr">"target"</span>: <span class="hljs-string">"admin"</span>,
    <span class="hljs-attr">"public"</span>: <span class="hljs-string">"build"</span>,
    <span class="hljs-attr">"ignore"</span>: [
      <span class="hljs-string">"firebase.json"</span>,
      <span class="hljs-string">"**/.*"</span>,
      <span class="hljs-string">"**/node_modules/**"</span>
    ],
    <span class="hljs-attr">"rewrites"</span>: [
      {
        <span class="hljs-attr">"source"</span>: <span class="hljs-string">"**"</span>,
        <span class="hljs-attr">"destination"</span>: <span class="hljs-string">"/index.html"</span>
      }
    ]
  }
}
</code></pre><h2 id="4-letting-firebase-know-about-the-new-target-you-just-created">4 Letting firebase know about the new target you just created.</h2>
<p>We need to associate the sites with a local target so Firebase knows which code to deploy where. We run the following command for each site: 
<code>firebase target:apply hosting &lt;target-name&gt; &lt;resource-name&gt;</code></p>
<pre><code>firebase target:apply hosting <span class="hljs-keyword">admin</span> <span class="hljs-keyword">admin</span>-multi-site-magic
</code></pre><p> where the target-name is just a unique name you choose, and resource-name is the site from step 1.</p>
<h2 id="5-deploy-to-firebase">5 Deploy to FIrebase</h2>
<p>We have done all the major steps, now we can deploy it to firebase to the targeted site.</p>
<pre><code>firebase deploy <span class="hljs-comment">--only hosting</span>
</code></pre><p>And that's it, I hope you liked it if you do leave some reactions and comments. Also, I am open to collaboration you can mail me or ping me on any of the social media platforms.</p>
]]></content:encoded></item><item><title><![CDATA[How to sync your local git and remote git repository changes?]]></title><description><![CDATA[Today we will focus on how we can synchronize our GitHub local repository master with an upstream repository branch of the GitHub project.
Now, you might think what is an upstream branch,
 Upstream branches define the branch tracked on the remote rep...]]></description><link>https://blog.stephinreji.com/how-to-sync-your-local-git-and-remote-git-repository-changes-1</link><guid isPermaLink="true">https://blog.stephinreji.com/how-to-sync-your-local-git-and-remote-git-repository-changes-1</guid><category><![CDATA[GitHub]]></category><category><![CDATA[Git]]></category><category><![CDATA[GitLab]]></category><category><![CDATA[remote]]></category><dc:creator><![CDATA[Stephin Reji]]></dc:creator><pubDate>Fri, 01 Jan 2021 07:19:59 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1609478525678/O26rNKV5r.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Today we will focus on how we can synchronize our GitHub local repository master with an upstream repository branch of the GitHub project.
Now, you might think what is an upstream branch,
 <strong>Upstream branches</strong> define the branch tracked on the remote repository by your local remote branch (also called the remote-tracking branch), the below figure will help ya'll understand.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1609477544959/F3072bw2g.png" alt="upstream-1-768x527.png" /></p>
<p><strong> <em>NOTE</em> : When we made any CLONE/PULL for the first time this is not required as we do fork the repository for the first time all the content in both will be the same.</strong></p>
<h4 id="so-why-do-we-need-this-process-to-be-done">So, Why do we need this process to be done?</h4>
<hr />
<p>This is very much necessary if you are working in a team and the teammates are working on different aspects of the project and you yourselves are working on something, 
Certain files will differ in both repositories as there are many other developers are merging the code upstream and your branch will not have that changes unless you sync the repository with the current upstream, so you might need to keep up with their code changes as well, this is called syncing your changes with your local and remote repo.</p>
<p>Synching will override the local repository with a master remote repository. And if there are files in the local repository that do not exist in the remote repo, local files get removed</p>
<p> If you don't, this will cause conflicts while you raise a PULL REQUEST.</p>
<p>Now, let me walk you through how to sync your changes with other changes by other developers.
Here I have the taken example of the <strong>Opencart</strong> GitHub project. First, change your working directory to the file location where you want to clone the project with the command.</p>
<p><code>$ cd your/local/storage/path</code></p>
<h2 id="step-1-clone-your-project-with-the-command">STEP 1: Clone your project with the command.</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1609480354853/Md7b1oX8H.png" alt="clone.png" /></p>
<p>After the clone is completed then move to the Opencart folder
This will move to the current working directory as <code>opencart</code></p>
<h2 id="step-2-list-the-current-configured-remote-repository-for-your-fork">STEP 2: List the current configured remote repository for your fork.</h2>
<p><code>$ git remote -v</code></p>
<p>This will list your forked repository response will be as below :</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1609480596471/_nY9P5z5H.png" alt="remote.png" /></p>
<p>This is our repository branch content now we have to get a project from the upstream repository
Now Specify a new remote upstream repository that will be synced with the fork. In Opencart Project this <em>https://github.com/opencart/opencart.git</em> is my upstream repository. Run the following command.</p>
<p><code>$ git remote add upstream https://github.com/opencart/opencart.git</code></p>
<p>Now you cross-check that the new upstream repository created for your forked repo. To do this run the same command again as below.</p>
<p><code>$ git remote -v</code></p>
<p>Now it will show the response as below and it will also include your upstream repository from your master project.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1609480801024/wv6NPQDPH.png" alt="upstream.png" /></p>
<h2 id="step-3-make-your-origin-repository-the-same-as-your-upstream-repository">STEP 3: Make your origin repository the same as your upstream repository.</h2>
<p>Now we have created upstream branches for our local repository. Now we will match the content from the upstream repository to the local repository.  In this, we will have all the code which is not in our local repository from the upstream repository</p>
<p>Run the commands as mentioned below.</p>
<p><code>$ git fetch upstream</code></p>
<p>This command will respond by fetching the content from the upstream for your Master repo. All the new branches and files, contents will the fetched from the upstream repository. And the response for the command as below.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1609480983405/8YXnCNyhE.png" alt="fetchupstream.png" /></p>
<p>Now checkout to your master branch with the command (if not on the master branch)</p>
<p><code>$ git checkout master</code></p>
<p>And run the command.</p>
<p><code>$ git merge upstream/master</code></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1609484801379/TF1Yf_fj5.png" alt="mergemaster.png" /></p>
<p>This will sync all the changes to your local repository if any, Now your local repository is synced with the upstream repository.</p>
<p><em>And That's it, If you have any queries let me know in the comments and it would be great if you leave a reaction as well </em></p>
]]></content:encoded></item><item><title><![CDATA[Connect your firebase Domain to any Custom Domain]]></title><description><![CDATA[Firebase is a free hosting provider, through this you can deploy from simple static HTML to complex e-commerce website made on the latest tech stack.
In this post, we will look into how to connect the firebase domain to the custom domain we bought fr...]]></description><link>https://blog.stephinreji.com/connect-your-firebase-domain-to-any-custom-domain</link><guid isPermaLink="true">https://blog.stephinreji.com/connect-your-firebase-domain-to-any-custom-domain</guid><category><![CDATA[domain]]></category><category><![CDATA[Firebase]]></category><category><![CDATA[Web Hosting]]></category><dc:creator><![CDATA[Stephin Reji]]></dc:creator><pubDate>Thu, 31 Dec 2020 04:15:07 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1609485821250/nZBhdlWgN.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Firebase is a free hosting provider, through this you can deploy from simple static HTML to complex e-commerce website made on the latest tech stack.
In this post, we will look into how to connect the firebase domain to the custom domain we bought from domain providers like <strong>Namecheap</strong>, <strong>Hostinger</strong>, <strong>Google Domains</strong>, etc.</p>
<p>We will add another post on how to deploy any website on firebase, stay tuned :)</p>
<p>Assuming that you already have hosted your website on firebase, do the following steps:</p>
<h2 id="add-domain">- Add Domain</h2>
<ol>
<li>Go to your <a target="_blank" href="https://console.firebase.com">firebase console</a></li>
<li><p>Select your project from the list of projects.<img src="https://dev-to-uploads.s3.amazonaws.com/i/yc86cfq4ru7an1s5f6ju.png" alt="project list" /></p>
</li>
<li><p>After you click on the desired project, select the <em>hosting</em> option from the left panel<img src="https://dev-to-uploads.s3.amazonaws.com/i/y490m1ve3jqazs5k3hc6.png" alt="firebase" /></p>
</li>
<li><p>CLick on Add custom domain, you will see the following window, add your custom domain name in the text field provided(make sure the spelling is correct)
<img src="https://dev-to-uploads.s3.amazonaws.com/i/p1nv441759tqqf3fkp0r.png" alt="adcd" /></p>
</li>
</ol>
<h2 id="verify-domain-ownership">-Verify domain ownership</h2>
<ol>
<li><p>In your domain provider's site, locate the DNS management page.
As soon as you click on continue, it will give you TXT value. This TXT value will be used by firebase to verify that you really own this domain.
<img src="https://dev-to-uploads.s3.amazonaws.com/i/pbjr5u0isufe5ojf8ik0.png" alt="connectdoamin" />.
In your domain provider's site, locate the DNS management page.
Add this TXt value as a DNS record, you will see a bunch of options like A record, AAA record, etc. to add as a record, select TXT and then input</p>
<ul>
<li>Type: TXT</li>
<li>Value: It must be the value provided by the firebase.</li>
<li>Host/Name: it should either <code>@</code> or <code>yourdomainname.com</code>(generally it's <code>@</code> - it will already be prefilled)</li>
<li>TTL Value: Keep it either <code>Automatic</code> or to <code>3600</code></li>
</ul>
</li>
<li><p>Allow up to 24 hours for the propagation of your updated TXT records, then click Verify.
It probably takes 15-20 mins, the trick is to continue clicking verify for few mins. eventually, it will get verified.
If clicking Verify prompts an error message, your records have not propagated or your values may be incorrect.</p>
</li>
</ol>
<h2 id="go-live">- Go Live</h2>
<ul>
<li><p>After your txt record gets verified, firebase will provide you with 2 A records which you have to add into your DNS Records of your domain provider by default the <em>QUICK SETUP MODE</em> will be selected which is suitable for new websites.<img src="https://dev-to-uploads.s3.amazonaws.com/i/r39x3bo788emfdk8pql1.png" alt="arecord" /></p>
</li>
<li><p>Add A new record in your DNS Management Section, just as you added the <code>TXT</code> record, this time add an <code>A</code> Record and then input.</p>
<ul>
<li>Type: A</li>
<li>Value: In this, you have to add the IP provided by Firebase, Your domain provider may list this term as "Data", "Points To", "Content", "Address", or "IP Address".</li>
<li>Host/Name: it should either <code>@</code> or <code>yourdomainname.com</code>(generally it's <code>@</code> - it will already be prefilled)</li>
<li>TTL Value: Keep it either <code>Automatic</code> or to <code>3600</code></li>
</ul>
</li>
<li><p>Do the above step twice, since firebase provides you with 2 IPs to add to your DNS.</p>
</li>
</ul>
<h1 id="common-domain-providers">Common domain providers.</h1>
<p>Here are some common domain providers and the types of input each might require. This information is kept up-to-date as much as possible, but refer to your domain provider's documentation for detailed instructions.</p>
<h2 id="namecheap">NameCheap</h2>
<p>DNS TXT record inputs</p>
<ul>
<li>Type    TXT</li>
<li>Host/Name    @</li>
<li>Value verification value provided in Firebase console.</li>
</ul>
<p>DNS A records inputs</p>
<ul>
<li>A    @    151.101.1.195 </li>
<li>A    @    151.101.65.195</li>
</ul>
<h2 id="hostinger">Hostinger</h2>
<p>DNS TXT record inputs</p>
<ul>
<li>Type    TXT</li>
<li>Host/Name    @</li>
<li>Value verification value provided in Firebase console</li>
</ul>
<p>DNS A records inputs</p>
<ul>
<li>A    @    151.101.1.195</li>
<li>A    @    151.101.65.195</li>
</ul>
<p>Note: if in case, your domain gets not connected, it's probably due to an existing <code>A</code> record in your DNS Records, just delete that then you are good to go but make sure, the firebase A records are not deleted.</p>
<h2 id="cloudfare">CloudFare</h2>
<p>DNS TXT record inputs</p>
<ul>
<li>Type    TXT</li>
<li>Host/Name    example.com</li>
<li>Value verification value provided in Firebase console.</li>
</ul>
<p>DNS A records inputs</p>
<ul>
<li>A    example.com    151.101.1.195</li>
<li>A    example.com    151.101.65.195</li>
<li>A    www    151.101.1.195</li>
<li>A    www    151.101.65.195</li>
</ul>
<h2 id="google-domains">Google Domains</h2>
<p>DNS TXT record inputs</p>
<ul>
<li>Type    TXT</li>
<li>Host/Name    @</li>
<li>Value verification value provided in Firebase console.</li>
</ul>
<p>DNS A records inputs</p>
<ul>
<li>A    @    151.101.1.195</li>
<li>A    www    151.101.1.195</li>
<li>A    www    151.101.65.195</li>
</ul>
<h2 id="google-cloud-dns">Google Cloud DNS</h2>
<p>DNS TXT record inputs</p>
<ul>
<li>Type    TXT</li>
<li>Host/Name    example.com</li>
<li>Value verification value provided in Firebase console.</li>
</ul>
<p>DNS A records inputs</p>
<ul>
<li>A    example.com    151.101.1.195</li>
<li>A    example.com    151.101.65.195</li>
<li>A    www    151.101.1.195</li>
<li>A    www    151.101.65.195</li>
</ul>
<h2 id="squarespace">Squarespace</h2>
<p>DNS TXT record inputs</p>
<ul>
<li>Type    TXT</li>
<li>Host/Name    @</li>
<li>Value verification value provided in Firebase console.</li>
</ul>
<p>DNS A records inputs</p>
<ul>
<li>A    @    151.101.1.195</li>
<li>A    @    151.101.65.195</li>
<li>A    www    151.101.1.195</li>
<li>A    www    151.101.65.195</li>
</ul>
<p>That's it for today!</p>
<p>Hope you liked the post, if you’ve got any questions your can Mail us <code>mail@stephinreji.me</code> or join our <a target="_blank" href="https://discord.gg/8cjErAy8yA">Discord-server</a> and do checkout our website <a target="_blank" href="https://forcommunity.tech">forcommunity.tech</a></p>
]]></content:encoded></item></channel></rss>