<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Patrick Lemmer</title>
    <description>The latest articles on DEV Community by Patrick Lemmer (@patricklemmer).</description>
    <link>https://dev.to/patricklemmer</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F892967%2Fb33eb7c2-f12c-4531-81d5-a9b7ffd27b5e.png</url>
      <title>DEV Community: Patrick Lemmer</title>
      <link>https://dev.to/patricklemmer</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/patricklemmer"/>
    <language>en</language>
    <item>
      <title>Why you should create a GitHub profile README (as a job seeking dev)</title>
      <dc:creator>Patrick Lemmer</dc:creator>
      <pubDate>Mon, 20 Feb 2023 14:33:49 +0000</pubDate>
      <link>https://dev.to/patricklemmer/why-you-should-create-a-github-profile-readme-as-a-job-seeking-dev-1e86</link>
      <guid>https://dev.to/patricklemmer/why-you-should-create-a-github-profile-readme-as-a-job-seeking-dev-1e86</guid>
      <description>&lt;p&gt;Let's get straight to the point.&lt;/p&gt;

&lt;p&gt;To understand why a profile README is a good idea for job seeking devs, let's see what this file is commonly used for.&lt;/p&gt;

&lt;p&gt;When you create a GitHub repo for your project, you also create a README.md file for this repo and you do it for a specifc reason. That could be a) you want to offer a central point for your projects documentation. A place where users can refer back to, to get information about your project. B) It could be used to hold any kind of information about the technical specs of your project or c) to highlight specific stuff about your project that otherwise lives somewhere in a hidden place, unavailable to some users/readers. There are other reasons why you create a README file, but the point is, you use it to highlight, document, inform, and so on.&lt;/p&gt;

&lt;p&gt;One thing you want to do as a job seeking dev, is to highlight, document, inform and so on about you, your skills and your projects. You may have other social profiles, where you already do this (or some of it), but since you likely host the code for your projects in a GitHub repo (or any other Git repo hosting platform) it is a good idea, to make use of the profile README.&lt;/p&gt;

&lt;p&gt;If you have a LinkedIn profile, you will know that this is mainly used to build a profile around you and your professional experience. The same way you can use your GitHub profile, to build a profile around you and your code. What and how much information you put into the README, is totally up to you. It will however, round off your complete application package very well, as you have a nice personal profile, whether the recruiter or hiring manager checks out your LinkedIn, your GitHub or even both.&lt;/p&gt;

&lt;p&gt;Here is how you create one:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You create a new repo&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--78JTbaVF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uzzqizqtphuyn6imfl4k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--78JTbaVF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uzzqizqtphuyn6imfl4k.png" alt="Create a new repository" width="319" height="261"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The repo MUST have the same name as your GitHub username. And you need to initialize it WITH the README file. (I have already created mine, hence the notification in the screenshot)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--utYREjsY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ejwpbu682yp3j1un04ko.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--utYREjsY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ejwpbu682yp3j1un04ko.png" alt="Use your GitHub account name as repository name" width="598" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gs3wp3QT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xhnqyowqogg5umrxnsba.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gs3wp3QT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xhnqyowqogg5umrxnsba.png" alt="Initialize the repository with a README file" width="599" height="178"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Now you have a repo with only one file. The README file. At this point you can get creative and add whatever information you would like to use, to highlight, document, inform and so on about you and your code.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A quick Google search for "GitHub profile README examples" will give you enough ideas to get started. You can also use templates or template generators to build this out. These will give you the Markdown, wich yout then simply have to add to the file and commit the changes.&lt;/p&gt;

&lt;p&gt;Here are two links that will help you writing Markdown yourself.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax"&gt;Basic writing and formatting syntax&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet"&gt;GitHub Markdown Cheatsheet&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One more thing: If you have any other social profiles such as LinkedIn, Twitter, etc. try to be consistent with your profiles. While each platform serves a different purpose, which means you have to create profiles around this purpose, keep things like username (if available), profile photo, summary, headline, etc. consistent across these platforms. That way you can be found easier and it also gives your personal brand a professional and mature look.&lt;/p&gt;

</description>
      <category>github</category>
      <category>readme</category>
      <category>jobsearchasdeveloper</category>
      <category>softwaredeveloper</category>
    </item>
    <item>
      <title>#buildinpublic: A fullstack MERN application (with TypeScript)</title>
      <dc:creator>Patrick Lemmer</dc:creator>
      <pubDate>Thu, 09 Feb 2023 22:41:41 +0000</pubDate>
      <link>https://dev.to/patricklemmer/buildinpublic-a-fullstack-mern-application-with-typescript-4a2d</link>
      <guid>https://dev.to/patricklemmer/buildinpublic-a-fullstack-mern-application-with-typescript-4a2d</guid>
      <description>&lt;p&gt;Hello friends!&lt;/p&gt;

&lt;p&gt;Welcome to my #buildinpublic series, where I’ll be sharing the development of a fullstack MERN app using TypeScript. The app is a pet adoption platform that aims to connect pet lovers with animal shelters and give furry friends a new home.&lt;/p&gt;

&lt;p&gt;In this series, I’ll be taking you through each step of the development process. From the idea to the deployment, you’ll get a behind-the-scenes look at the challenges, triumphs, and lessons learned along the way. Building in public can be a valuable learning experience, both for myself and for those following along.&lt;/p&gt;

&lt;p&gt;This is an exciting opportunity to learn about the fullstack development process and see a project come to life. Let’s get started on this adventure together!&lt;/p&gt;

&lt;p&gt;You can follow along by bookmarking the link to this post or follow me on &lt;a href="https://www.linkedin.com/in/patricklemmer/"&gt;LinkedIn&lt;/a&gt; or &lt;a href="https://twitter.com/patrick_lemmer"&gt;Twitter&lt;/a&gt;, where I will also share all updates about my progress.&lt;/p&gt;

&lt;h1&gt;
  
  
  1: The idea
&lt;/h1&gt;

&lt;p&gt;I have just finished my last project, an overhaul of my personal website (the one you are looking at right now). It was just time for something new. I gave it a whole new minimalistic look and included features like darkmode, a contact form with a backend and a blog integration using a headless CMS.&lt;/p&gt;

&lt;p&gt;Before I even started working on that though, I knew that I wanted to build out a fullstack project that solves a real world problem, to practice my MERN skills. So I took the time while building out my website, to think of a problem that I can solve with the MERN app.&lt;/p&gt;

&lt;p&gt;I love animals and we have just reached the end of the corona pandemic. During the last two to three years, a lot of pets have ended up in animal shelters. That’s very unfortunate for all the animals, and a heavy financial burden on those shelters.&lt;/p&gt;

&lt;p&gt;With that in mind, I thought of ways to help both, animals and shelters.&lt;/p&gt;

&lt;p&gt;The idea: A platform that lets its users search for and find a pet they wish to adopt, and also lets them get in touch with the shelter to start the adoption process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt;&lt;br&gt;
Finding an idea for a fullstack MERN project&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;br&gt;
In the past I have gotten the advice to think of topics that I have an interest in and to find out what problems or possibilities for improvements there are within the scope of the topic of choice. Ideally those problems are real and a solution would help real people (or animals). So that’s what I did and I can already see that it really helps to work with something I am interested in, because I will likely keep pushing when things get hard as I’ll have a personal passion for helping animals.&lt;/p&gt;

&lt;h1&gt;
  
  
  2: TypeScript
&lt;/h1&gt;

&lt;p&gt;My original plan was, using JavaScript to build out this app. The MERN stack allows me to use JavaScript from start to finish for frontend and backend.&lt;/p&gt;

&lt;p&gt;Since I am currently also job searching full-time, I have realised that there is a growing demand and usage of TypeScript out there. For that reason, I already planned on allocating a few hours per week on learning TypeScript, but in smaller projects.&lt;/p&gt;

&lt;p&gt;My plans then changed, because of a recent chat with a senior developer, who said “why don’t you use TypeScript in your MERN app project”. I honesty haven’t thought of this myself, because it felt very much “out of my league” at this point. I was more than sceptical and a little nervous, because it means that I would add another component to this project, which I don’t have much experience with yet.&lt;/p&gt;

&lt;p&gt;But, after going through some documentation and understanding what TypeScript really is compared to JavaScript, I felt a little better. All JavaScript is syntactically valid TypeScript, which makes it way less of a challenge than learning a new language from scratch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt;&lt;br&gt;
I have only worked with TypeScript once, and that was a while ago. It seems like I add another (unnecessary) challenge on top of my actual challenge of building the MERN app. Will I be able to do it?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;br&gt;
I had a good look at the offcial TypeScript documentation and learned about the differences between JS and TS. Once I realised, that I can’t really mess up, because syntactically JS is valid TS, I decided to just go with it and use TypeScript for the pet adoption app.&lt;/p&gt;

&lt;h1&gt;
  
  
  3: Choosing an API
&lt;/h1&gt;

&lt;p&gt;One of the first questions I asked myself, after having decided on the topic and the tech stack I would be using was, “Where do I get the data from?” Since I am building a pet adoption platform, I knew I need data about the animals and the shelters and I need users to be able to search for animals including some search filters, get details about the pets that were returned by the search, and get the necessary information about the shelters. I had never chosen an API for a project myself, so I wasn’t quite sure what to look out for or what I must avoid.&lt;/p&gt;

&lt;p&gt;After some research, I came up with a list of criteria, that matches my personal needs for this project (this list might look very different for a different use case):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The API must be free or offer a free tier with the functionality I need&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The API must have good documentation and enough resources for developers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There should be a good community behind the API provider or a way of receiving support in case I need help&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I shouldn’t have to worry about any legalities by using the API&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It must be a legit API (provider)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With these points in mind, I referred to a &lt;a href="https://github.com/public-apis/public-apis"&gt;list of public APIs on GitHub&lt;/a&gt;, which I have come across in the past. This list is sorted by topic, and, funny enough, the very first topic is “Animals”. So I started going through these APIs one by one, to see if they offer what I am looking for and match my list of criteria.&lt;/p&gt;

&lt;p&gt;Eventually I found what I was looking for in the free, well documented, well supported and legitimate &lt;a href="https://www.petfinder.com/developers/"&gt;Petfinder API&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt;&lt;br&gt;
My challenge in this step was, to make a decision on the right API for my project, without knowing too much about how to choose one in the first place. What must I look out for, what is important and where do I find it?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;br&gt;
After a while of researching, I understood that the most important criteria for me, would have to be a free API or at least a free tier offering the functionality I need. I made this my top priority and simply checked all the APIs I could find against my list of criteria, until I narrowed it down to an API that ticks the most boxes. (In this case my choice ticks all the boxes)&lt;/p&gt;

&lt;p&gt;— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —&lt;/p&gt;

&lt;p&gt;You are now up to date with my progress in this project. 🎉&lt;/p&gt;

</description>
      <category>mern</category>
      <category>fullstack</category>
      <category>buildinginpublic</category>
    </item>
    <item>
      <title>How to use a custom domain on GitHub pages</title>
      <dc:creator>Patrick Lemmer</dc:creator>
      <pubDate>Mon, 18 Jul 2022 07:52:03 +0000</pubDate>
      <link>https://dev.to/patricklemmer/how-to-use-a-custom-domain-on-github-pages-3fbk</link>
      <guid>https://dev.to/patricklemmer/how-to-use-a-custom-domain-on-github-pages-3fbk</guid>
      <description>&lt;p&gt;You just hosted a website on GitHub pages and now you're wondering how to add a custom domain to it to give your website that final touch? Here is how.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;This article assumes, that your website is already hosted on GitHub pages.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;In the first step, you need to add some DNS records in the domain settings of your custom domain's domain name registrar. In my case, this is GoDaddy, where the settings look like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V2HqQ-C0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9vh4ixfembmbp19wecb1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V2HqQ-C0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9vh4ixfembmbp19wecb1.png" alt="DNS settings" width="880" height="539"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You just add four new records:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Type:&lt;/strong&gt; A (the same for all records)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Name:&lt;/strong&gt; @ (the same for all records)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub pages IP addresses:&lt;/strong&gt; 
185.199.108.153, 
185.199.109.153, 
185.199.110.153, 
185.199.111.153&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TTL:&lt;/strong&gt; you can use the default value (the same for all records)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Save these new records and head over to github.com.&lt;br&gt;
Here, you navigate to the repository of your website. Once there, go to Settings -&amp;gt; Pages.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OGaVm8ry--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tck9vhow4omx7nzku2hy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OGaVm8ry--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tck9vhow4omx7nzku2hy.png" alt="GitHub settings" width="880" height="539"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You should see something like this under "GitHub pages". Now, you only need to add your custom domain in the "Custom domain" field and hit "Save". GitHub will run checks in the background, to validate your domain for the use with GitHub pages. This might take a moment. Once done, you can check "Enforce HTTPS", if this is not happening automatically.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GGwSyymH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5ff8s6s24ssvqob5ibap.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GGwSyymH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5ff8s6s24ssvqob5ibap.png" alt="GitHub settings" width="880" height="523"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before you can visit your app under the new custom domain, there is one last thing to do. You need to add a CNAME file to your gh-pages branch. For this, simply click Add file -&amp;gt; Create new file and call this new file "CNAME" (this must be uppercase). Inside this file you add one line. Your custom domain.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;customdomain.com&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3syOoVL0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/al6wzc9wnmq0wg1bqjfv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3syOoVL0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/al6wzc9wnmq0wg1bqjfv.png" alt="GitHub settings" width="880" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is it. You have now added a custom domain to your website hosted on GitHub pages. It might take a minute for all these changes to take effect. Once you see "Your site is published at …. " in the GitHub Pages tab, your site is published and you can visit it under the new custom domain.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; In some cases the CNAME file gets added automatically when you save the custom domain under "GitHub Pages". Just make sure to check if this is the case and add it manually if necessary.&lt;/p&gt;

&lt;p&gt;When you make changes to your website and deploy it again, you might see that your custom domain and the CNAME file have been deleted. In that case you will need to add both again in order to use the custom domain. To avoid the CNAME file deletion, you could make a pull request before you commit the changes to the remote repository.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Connect your contact form to an email account — with HTML only (Simple, quick, and beginner friendly)</title>
      <dc:creator>Patrick Lemmer</dc:creator>
      <pubDate>Sun, 17 Jul 2022 10:58:12 +0000</pubDate>
      <link>https://dev.to/patricklemmer/connect-your-contact-form-to-an-email-account-with-html-only-simple-quick-and-beginner-friendly-4j6j</link>
      <guid>https://dev.to/patricklemmer/connect-your-contact-form-to-an-email-account-with-html-only-simple-quick-and-beginner-friendly-4j6j</guid>
      <description>&lt;p&gt;Your developer portfolio website, a small online shop, or a small startup. All of these websites would likely benefit from a contact form, through which customers, or recruiting managers can get in touch with your or your business.&lt;/p&gt;

&lt;p&gt;While bigger applications take care of this through their backend, smaller websites that are just not meant to be big and don’t have a backend, need a solution as well. In this article I will go through two very simple ways to integrate a contact form and connect it to your private or business email account, using HTML only.&lt;/p&gt;

&lt;p&gt;Shall we have a look?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The first option is using a parameter called mailto:&lt;br&gt;
You can use this parameter inside an a tag’s href attribute, like so:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--P2FSggu0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t1r52dqzmsa9txp9xc3w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P2FSggu0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t1r52dqzmsa9txp9xc3w.png" alt="Mailto: parameter" width="880" height="117"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That’s it. In its simplest form, this option only needs the mailto: parameter in combination with the email address that shall receive the emails. If you hover over the “Send Email” link with your mouse, you can see the email address that will receive the email in the bottom left of your browser.&lt;/p&gt;

&lt;p&gt;When you go ahead and click the link, your email service will open a new email with the defined address already sitting in the address field. You are then ready to write and send the email. For a very basic use case or just for testing this can be a very convenient option.&lt;/p&gt;

&lt;p&gt;There are also a couple of upgrades you can do here.&lt;/p&gt;

&lt;p&gt;If you wanted to receive the emails from your contact form in more than one email account, you can simply add another address, separated by a comma:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wVAEuP2X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5l7oaguebn4921ttj2nh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wVAEuP2X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5l7oaguebn4921ttj2nh.png" alt="Multiple emails" width="880" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In order to add a predefined subject to all incoming emails, you can use the subject parameter to the href attribute:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9CCiYY9T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/keseynvbwwik39993ilg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9CCiYY9T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/keseynvbwwik39993ilg.png" alt="Add a subject" width="880" height="36"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All your incoming emails from your contact form will then have “Sent via contact form” as subject, which, for example, could easily be used for email routing within your inbox. Not bad.&lt;/p&gt;

&lt;p&gt;Other options are CC, BCC and even some predefined text inside the actual email body.&lt;/p&gt;

&lt;p&gt;CC and BCC:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NIzRthbV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/durt8nhvidqfx6hatqrl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NIzRthbV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/durt8nhvidqfx6hatqrl.png" alt="Mailto: options" width="880" height="89"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Text in the email body:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GOFfCZ7s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5s6x53tv1pb21czpohyj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GOFfCZ7s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5s6x53tv1pb21czpohyj.png" alt="Text in email body" width="880" height="87"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want, you can also combine all of those options.&lt;/p&gt;

&lt;p&gt;While this is a very simple and quick way to achieve the goal, it does come with a downside. If you go back to the very first image above, you can see that by hovering over the “Send Email” link, everyone on the internet can see the email address that is used. If this is something you would like to avoid, then this option is nothing for you. Also, the mailto: parameter invites spam into your mailbox. Another thing to consider, when using this option. So think about it beforehand and only use option 1, if you can live with these aspects or if you just need to test something.&lt;/p&gt;

&lt;p&gt;Let’s move on to the second option, which is just a tiny bit more difficult, I promise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The second option is, to use a form backend service provider&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Even though a simple website like ours doesn’t use a backend, we can still make use of one in the form of a form backend provider. All you need to do is create an account with the provider and connect it to your frontend code. That’s a very basic explanation, I know. Let’s look at it in a bit more detail.&lt;/p&gt;

&lt;p&gt;This is a very basic contact form.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qAEVOVan--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y166d3vbukyxreuaqnau.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qAEVOVan--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y166d3vbukyxreuaqnau.png" alt="HTML code of a very basic contact form" width="880" height="269"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you add this bit of code to your HTML code and then click the “Submit” button, nothing much happens. That’s because the form doesn’t have anywhere to point to yet. However, this code already has all the necessary bits needed to use it in combination with the service mentioned above. You just have to connect it.&lt;/p&gt;

&lt;p&gt;All it takes now, is to create a free account with a provider like Formspree (there are others, Google knows them).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8M9U6v7U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n3w451mq1sdk26yi621w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8M9U6v7U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n3w451mq1sdk26yi621w.png" alt="Formspree website" width="880" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you have your account, log in. You will now see something similar to this (you won’t see the contact form settings yet). Create a new form by clicking the “+” and “New form”:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kwJJdD-7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w2icryurji5v8dt8psoy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kwJJdD-7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w2icryurji5v8dt8psoy.png" alt="Create new form" width="880" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And then simply set a name for the form and most importantly add the email address you would like to use in order to receive the messages sent through your contact form. All that’s left to do now, is to integrate your new form into your HTML code. For this you need two things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the action attribute set to the new form endpoint provided to you&lt;/li&gt;
&lt;li&gt;the method attribute set to “POST”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Add both attributes to your form element and that’s it. If you want, you can also go through the settings menu and add things like reCAPTCHA to your form.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oi213lFL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aan8cbeyzcjg5rwo10k9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oi213lFL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aan8cbeyzcjg5rwo10k9.png" alt="Form settings" width="880" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One thing to mention here is, at the time of writing this article the free version of this set up allows up to 50 submissions per month. If you need more, you’ll have to subscribe to a paid account. If 50 submissions are enough, you’re all set.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Connecting a (contact) form on your website to your email account can be very easy, if you don’t have any specific requirements. There are also other rather simple ways to achieve this goal, that don’t require you to build a dedicated backend. However, the two options explained in this article, are the entry point to the question “How can I connect my form to my email” and therefore provide a simple solution to this task.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>html</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Attention new web developers! Use “this” from the beginning of your developer career.</title>
      <dc:creator>Patrick Lemmer</dc:creator>
      <pubDate>Sat, 16 Jul 2022 14:47:55 +0000</pubDate>
      <link>https://dev.to/patricklemmer/attention-new-web-developers-use-this-from-the-beginning-of-your-developer-career-5f2m</link>
      <guid>https://dev.to/patricklemmer/attention-new-web-developers-use-this-from-the-beginning-of-your-developer-career-5f2m</guid>
      <description>&lt;p&gt;Now, I want to be honest with you right away. The simple hack I will introduce you to in a moment, is not going to change the world of web development and it also won’t help you to get from beginner to expert over night. It’s also nothing new, and probably used by a lot if people every single day. It is very simple and easy to use, BUT it can help you over-proportionally compared to how simple it actually is. If you have used HTML and CSS before, it’s likely that you already know about this and this article is a waste of your time. However, if you just started to learn HTML and CSS or you are planning to, do yourself a favour, and read it to the end.&lt;/p&gt;

&lt;p&gt;“Enough of this build up. Get to the point!”, you say? And you`re right. Let’s go!&lt;/p&gt;

&lt;p&gt;I am talking about the CSS properties “border” and “outline”. When speaking about HTML and CSS, you can imagine that HTML lets you describe (build) the structure of your web page, and CSS lets you style this structure to make it look nicer. In order to style this structure, you will use properties which describe what should be styled and then give these properties values, which describe how something should be styled.&lt;/p&gt;

&lt;p&gt;Now, why are “border” and “outline” so special? Because they can both help you, as a new developer, to understand how your web pages are structured and how this structure behaves when you change something. When I just started out, I didn’t have a clue why a page looks the way it does. I don’t even want to begin with the times where I changed something in my HTML code and then had to try and understand why it looks very different to what I anticipated it to look. In the beginning, it can feel rather abstract to just imagine how HTML “looks” in a browser. And that’s exactly where these two properties come in very handy.&lt;/p&gt;

&lt;p&gt;“Border” and “outline” can help you understand how and why a web page looks the way it does.&lt;/p&gt;

&lt;p&gt;With this, the question “Why can the properties “border” and “outline” help me as a new developer?” is answered. Let’s move on with the question, “How can they help?”&lt;/p&gt;

&lt;p&gt;For this it is important to understand them better. Both properties are…&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;very similar in what they do&lt;/li&gt;
&lt;li&gt;slightly different in how they do it&lt;/li&gt;
&lt;li&gt;great tools for every beginner developer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And since they are slightly different in how they do it, I personally prefer “outline” over “border”, because it offers a more accurate reading. Here is why:&lt;/p&gt;

&lt;p&gt;Let’s say we have two paragraphs inside a container on our website.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nf0nsygW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oan1ngxhuca09vs86m2n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nf0nsygW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oan1ngxhuca09vs86m2n.png" alt="Two paragraphs inside a div container" width="880" height="295"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1mDELb3V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zd4eyp81fz091txzygeu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1mDELb3V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zd4eyp81fz091txzygeu.png" alt="This is what it looks like, when you view your code in the browser" width="880" height="233"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you look at the text right now, it can be difficult to understand which space these two paragraphs and the container around them take up on the whole page.&lt;/p&gt;

&lt;p&gt;Both of the properties mentioned above outline an element, so that you can see exactly where it “sits”, how big it is, etc. Let’s have a look at what this looks like, with the border property.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Sla29Qm6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/blz1u4t2u3yfij2h18nb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Sla29Qm6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/blz1u4t2u3yfij2h18nb.png" alt="All elements have received a border property with some value. Here I used solid lines of 5px." width="880" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BAxo2Y-G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wjn5v2uas4qa8ez2hn6e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BAxo2Y-G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wjn5v2uas4qa8ez2hn6e.png" alt="This is what your code looks like in the browser with borders." width="880" height="234"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, with the help of a border around the text and container, it is now pretty easy to understand where and how big your elements are. This makes it much easier to rebuild or simply just understand the structure of your web page, because you don’t have to guess anymore. And all this, with one CSS property applied to your elements. Pretty simple and helpful, right?&lt;/p&gt;

&lt;p&gt;I think so too.&lt;/p&gt;

&lt;p&gt;But there is one more thing. I mentioned earlier, that “outline” is more accurate.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;And since they are slightly different in how they do it, I personally prefer “outline” over “border”, because it offers a more accurate reading. Here is why:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let’s see what that means.&lt;/p&gt;

&lt;p&gt;The “outline” property does not take up any space and therefore doesn’t change the size or position of an element. The element itself stays in its true position. The “border” property does add space to the element, which means that it moves the element’s position and alters its size. That fact makes “outline” more accurate, because you will always be able to see your element’s true position on a page. The image below, gives you a better idea of what that means.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zxiUt5wu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d68owq3xpt0tqifz8tx2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zxiUt5wu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d68owq3xpt0tqifz8tx2.png" alt="The first example uses the border property, the second example uses the outline property" width="880" height="229"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you concentrate on the left part of this image only, you can easily spot the difference. Can you see the whitespace between the green lines and the left end of the browser window? There is a different amount of space in both examples. And that is what is meant by “outline” does not take up any space, while “border “ does. Using “border” adds space between the element and the left end of the browser window. Have a look at the first paragraph of the first example. It moves the first letter “L” towards the right, because the green and red border are now sitting between the element (in this case a paragraph) and the end of the browser window. In the second example, you can see that the letter “L” is closer to the end of the browser window. This also represents the true position of the beginning of this paragraph, because the green and red lines are displayed outside of the element and in this case even on top of each other.&lt;/p&gt;

&lt;p&gt;While there is more to it, this rule of thumb helped me in the beginning.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A “border” starts on the invisible border line of an element and is added inside the element, while the “outline” also starts on the invisible border line of an element but is added outside the element.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The following is a visual representation of the relationship between an element and the “border” property or an element and the “outline” property.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--79SEOij6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h84uvd8l6w4o1hd459mx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--79SEOij6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h84uvd8l6w4o1hd459mx.png" alt="Relationship of elements with border or outline properties" width="500" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;br&gt;
Especially when you are new to web development, and you are still trying to understand how your HTML code “looks” inside of a browser, it can be really helpful to use a border or outline to show the position and size of your elements in the browser. I would consider myself to have left the absolute beginner phase of web development and I still use this little trick all the time, when I need to understand the structure of a page or when I need to rebuild parts of it. I am pretty sure that everyone who is using these properties as tools in the development phase will benefit greatly. Just don’t forget to get rid of all the borders/outlines, once you are done developing a website. They might look a bit out of place on a live website.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; There are more differences between “border” and “outline”, but this article focuses only on those relevant for the purpose described above.&lt;/p&gt;

</description>
      <category>css</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>html</category>
    </item>
  </channel>
</rss>
