<?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: Jess Chandler</title>
    <description>The latest articles on DEV Community by Jess Chandler (@jessachandler).</description>
    <link>https://dev.to/jessachandler</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%2F54937%2Fe2d504a6-10eb-4792-b067-ba42fcf802d9.jpg</url>
      <title>DEV Community: Jess Chandler</title>
      <link>https://dev.to/jessachandler</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jessachandler"/>
    <language>en</language>
    <item>
      <title>One language?</title>
      <dc:creator>Jess Chandler</dc:creator>
      <pubDate>Mon, 17 Feb 2020 18:33:23 +0000</pubDate>
      <link>https://dev.to/jessachandler/one-language-53ia</link>
      <guid>https://dev.to/jessachandler/one-language-53ia</guid>
      <description>&lt;p&gt;&lt;strong&gt;Do you spend all/most of your time with one language/tech stack?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In my day job, I work in data analysis, programming in VBA and R. For my side-hustle, I manage a site with a MEEN tech stack. In my free time, I create apps in Swift, manage websites with jekyll and MERN, and try to learn and adapt.&lt;/p&gt;

&lt;p&gt;However, I see some folks who have deep knowledge in one code base and don't seem to switch constantly. I'm curious, what portion of folks work exclusively or almost exclusively in one language/tech stack.&lt;/p&gt;

&lt;p&gt;photo credit: Nick Fewings on Unsplash&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>Where to logic?</title>
      <dc:creator>Jess Chandler</dc:creator>
      <pubDate>Wed, 05 Dec 2018 01:00:15 +0000</pubDate>
      <link>https://dev.to/jessachandler/where-to-logic--310p</link>
      <guid>https://dev.to/jessachandler/where-to-logic--310p</guid>
      <description>&lt;h2&gt;
  
  
  Motivation
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;me&lt;/strong&gt;: Did you know that you can return HTML from a method in a mongoose schema?&lt;br&gt;
&lt;strong&gt;also me&lt;/strong&gt; : I did not.&lt;br&gt;
&lt;strong&gt;me&lt;/strong&gt; : Sure. I just tried it out, now, you can use methods like item.getSummaryContainer() to get your summary container HTML.&lt;br&gt;
&lt;strong&gt;also me&lt;/strong&gt; : Cool.&lt;em&gt;runs off to create a bunch of methods to return HTML, deletes if/then statements in views and replaces with method calls&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;minutes pass &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;also me&lt;/strong&gt;: Wait, but why?&lt;br&gt;
&lt;strong&gt;me&lt;/strong&gt;: &lt;em&gt;blinks&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Discussion
&lt;/h2&gt;

&lt;p&gt;So many times as a developer, I've come up with some new (to me) idea and then jumped in with two feet only to later wonder if perhaps the idea was not so good. Actually deciding is hard and requires experience that not all of us have.&lt;/p&gt;

&lt;p&gt;My current rendition of a new and fun, but perhaps not good (or maybe it is) idea is as good as any to drive the conversation about how developers should approach these "Wait, but why?" decisions. I don't personally have the answers, but I hope that discussion in the comments will help suss it out. &lt;/p&gt;
&lt;h3&gt;
  
  
  Setup
&lt;/h3&gt;

&lt;p&gt;I gave a bit of it away in the motivation - what if we return HTML from mongoose schema methods. For this example, we have a Mongo Express Node stack. I'll show two code approaches to one very simple display if/then. Assume in both cases that user.things are returned as part of the response from the server. &lt;/p&gt;
&lt;h4&gt;
  
  
  Logic in EJS
&lt;/h4&gt;

&lt;p&gt;When the logic is in the EJS, the schema is just the variables (or other methods, but none shown here for simplicity), and the HTML is broken by if/then statements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;thing.js&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const mongoose = require('mongoose');

const thingSchema = mongoose.Schema({
     name: { type: String },
     description: { type: String },
     cost: { type: Number }
 });

module.exports = mongoose.model('Thing', thingSchema);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;userthings.ejs&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;% include ./partials/header %&amp;gt;
&amp;lt;div class="container-fluid"&amp;gt;
  &amp;lt;div class="col-12 col-md-8 mx-auto"&amp;gt;
    &amp;lt;div id="upcoming"&amp;gt;
      &amp;lt;h2&amp;gt;Things&amp;lt;/h2&amp;gt;
      &amp;lt;div class="row"&amp;gt;
        &amp;lt;% user.things.forEach(function(thing){ %&amp;gt; 
          &amp;lt;div&amp;gt;&amp;lt;h1&amp;gt; &amp;lt;%= thing.name %&amp;gt; &amp;lt;/h1&amp;gt;
            &amp;lt;% if (thing.sold) { %&amp;gt;
              &amp;lt;h5&amp;gt; was sold for &amp;lt;%= this.cost %&amp;gt; &amp;lt;/h5&amp;gt;
            &amp;lt;% } else { %&amp;gt; 
              &amp;lt;h5&amp;gt;&amp;lt;%= this.description %&amp;gt; for just &amp;lt;%= this.cost %&amp;gt;&amp;lt;/h5&amp;gt;
            &amp;lt;% } %&amp;gt;
            &amp;lt;/div&amp;gt;
        &amp;lt;% }) %&amp;gt;
      &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;% include ./partials/header %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Logic in Mongoose Schema
&lt;/h4&gt;

&lt;p&gt;When the logic is in the schema, the HTML is not clear from the EJS page, but the page is clean.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;thing.js&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const mongoose = require('mongoose');

const thingSchema = mongoose.Schema({
     name: { type: String },
     description: { type: String },
     cost: { type: Number },
     sold: { type: Boolean )}
 });

thingSchema.method({
    printinfo: function () {
      let theinfo = '&amp;lt;div&amp;gt;&amp;lt;h1&amp;gt;'+this.name+'&amp;lt;/h1&amp;gt;&amp;lt;h5&amp;gt;'+this.description+' for just '+this.cost+'&amp;lt;/h5&amp;gt;&amp;lt;/div&amp;gt;'
      if (this.sold) {
        theinfo = '&amp;lt;div&amp;gt;&amp;lt;h1&amp;gt;'+this.name+'&amp;lt;/h1&amp;gt;&amp;lt;h5&amp;gt; was sold for '+this.cost+'&amp;lt;/h5&amp;gt;&amp;lt;/div&amp;gt;'
      }
      return the_info
    }
});

module.exports = mongoose.model('Thing', thingSchema);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;userthings.ejs&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;% include ./partials/header %&amp;gt;
&amp;lt;div class="container-fluid"&amp;gt;
  &amp;lt;div class="col-12 col-md-8 mx-auto"&amp;gt;
    &amp;lt;div id="upcoming"&amp;gt;
      &amp;lt;h2&amp;gt;Things&amp;lt;/h2&amp;gt;
      &amp;lt;div class="row"&amp;gt;
        &amp;lt;% user.things.forEach(function(thing){ thing.printinfo(); }) %&amp;gt;
      &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;% include ./partials/header %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ultimately, both return the same HTML and present the same results. Which is better? Is one more correct? Why? I think it is possible that the answer may be "just do what feels right for you" but I don't actually &lt;em&gt;know&lt;/em&gt;. I'd like to know how folks work this kind of stuff out. &lt;/p&gt;

&lt;h2&gt;
  
  
  Game Plan
&lt;/h2&gt;

&lt;p&gt;My game plan at this point is to continue to try, fail, and try again with things. I will continue to read to learn about others' ideas and to share when new things come along to excite or surprise me. I love that the dev community can be so supportive and creative in this wild and free land of the interwebs. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I hope that you, fellow devs, will put your ideas on how devs, especially less experienced devs, can make choices like this, below.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Explain git config Like I'm Five</title>
      <dc:creator>Jess Chandler</dc:creator>
      <pubDate>Sat, 10 Nov 2018 19:19:02 +0000</pubDate>
      <link>https://dev.to/jessachandler/explain-git-config-like-im-five-750</link>
      <guid>https://dev.to/jessachandler/explain-git-config-like-im-five-750</guid>
      <description>&lt;p&gt;I felt like I &lt;em&gt;totally understood&lt;/em&gt; when I set up my git config for an app running on heroku to finally have a staging and production environment separately. However, it has been a few months since I did it, and now things are not working as I thought they would. &lt;strong&gt;Clearly, I did not understand at all.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Essentially, I wanted to have a heroku staging app (generic heroku url) and my heroku production app (at my url) where I can get logs for both and manage both through the heroku CLI on my terminal. This seems like a fairly typical need, and I expect I'm not alone in getting confused.&lt;/p&gt;

&lt;p&gt;Here's where I'm at: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I followed &lt;a href="https://devcenter.heroku.com/articles/multiple-environments" rel="noopener noreferrer"&gt;Heroku dev guidance&lt;/a&gt; to setup my environment... &lt;em&gt;I think&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Everything was working smashingly. My master pushes went to my github repo and were automatically deployed on my production heroku app. My staging pushes went directly to my heroku staging app. &lt;/li&gt;
&lt;li&gt;I was concerned about an issue and ran &lt;code&gt;heroku logs&lt;/code&gt; and then a series of heroku commands on my master branch only to continuously get information about my staging environment. No amount of &lt;code&gt;heroku logs -r production&lt;/code&gt; would change this situation.&lt;/li&gt;
&lt;li&gt;In an attempt to get logs from my production app, I ran &lt;code&gt;heroku git:remote -a appname -r production&lt;/code&gt;. Sadly, that changed my production pointer from my github repo back to heroku (which expected to get code from github).&lt;/li&gt;
&lt;li&gt;I manually changed the &lt;code&gt;url&lt;/code&gt; for my production remote back to github in my git.config. Now, changes push properly to github again, but I cannot see production heroku logs using the CLI. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How is this so confusing? I tried a ton of googling for guidance git-config but encountered explainer after explainer just going step by step through typing shell commands to set things up and not really discussing &lt;em&gt;WHAT IN THE WORLD&lt;/em&gt; is going on inside the .git/config file.&lt;/p&gt;

&lt;p&gt;I appeal to my amazing &lt;strong&gt;DEV.TO&lt;/strong&gt; friends for help here. Explain this whole .git/config to me like I'm 5.&lt;/p&gt;

&lt;p&gt;FWIW - mine looks something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[branch "master"]
    remote = production
    merge = refs/heads/master
[remote "heroku"]
    url = git@heroku.com:myapp.git
    fetch = +refs/heads/*:refs/remotes/heroku/*
[remote "production"]
        url = https://github.com/me/myapprepo.git
    merge = refs/heads/master
[remote "staging"]
    url = https://git.heroku.com/adjective-noun-number.git
    fetch = +refs/heads/*:refs/remotes/staging/*
[heroku]
    remote = staging
[push]
    default = tracking
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>explainlikeimfive</category>
    </item>
    <item>
      <title>Do I really need to create classes in two places?</title>
      <dc:creator>Jess Chandler</dc:creator>
      <pubDate>Sat, 22 Sep 2018 13:29:11 +0000</pubDate>
      <link>https://dev.to/jessachandler/do-i-really-need-to-create-classes-in-two-places-4mnn</link>
      <guid>https://dev.to/jessachandler/do-i-really-need-to-create-classes-in-two-places-4mnn</guid>
      <description>&lt;p&gt;I have a website for which I've written an API using mongoose models and nodejs. &lt;br&gt;
Now, I am creating an app which will use the same API. Whether I create it in Xcode (just iOS) and Android Studio (just Android) or use a combined framework (like Flutter), I find myself creating classes that duplicate the Mongoose models. For example, I have a mongoose model for User, and &lt;strong&gt;I have now, in a separate location, a class for User&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;My concern here is maintainability. If I update the API or make a change to the underlying models, I have to do this in two places. While I don't have a big application, I still feel as though I am doing this wrong.&lt;/p&gt;

&lt;p&gt;Advice requested. :) &lt;/p&gt;

&lt;p&gt;Okay, y'all. I think I just need to get my head around it. For the website, I have written an API that relies on the mongoose models, so I don't end up recreating them in that instance (for the front end). Unfortunately, I set up the API such that it returns the front end pages. That means that I cannot use it for mobile. I think that I can write a separate API for my mobile apps that lives on the same server and then will not have the redirects (and potentially then go back and have one pretty unified API that knows if it is serving a mobile app or the website).&lt;br&gt;
I can create dart classes for Flutter (or do it uniquely for iOS and Android), so I can also have local cache of data.&lt;/p&gt;

</description>
      <category>help</category>
    </item>
    <item>
      <title>Mobile Device for testing Android?</title>
      <dc:creator>Jess Chandler</dc:creator>
      <pubDate>Fri, 10 Aug 2018 20:32:25 +0000</pubDate>
      <link>https://dev.to/jessachandler/mobile-device-for-testing-android-30hn</link>
      <guid>https://dev.to/jessachandler/mobile-device-for-testing-android-30hn</guid>
      <description>&lt;p&gt;Y'all, I am deep in the Apple ecosystem, and I've been making iOS applications. I want to extend over to Android, but I am completely ignorant. I cannot find Android devices in local thrift stores, and I don't know what I should be looking for. &lt;/p&gt;

&lt;p&gt;What physical device(s) do you use to test your Android applications? What do you recommend? &lt;/p&gt;

</description>
      <category>help</category>
    </item>
    <item>
      <title>Making a Simple Link List for Sharing</title>
      <dc:creator>Jess Chandler</dc:creator>
      <pubDate>Tue, 07 Aug 2018 17:54:50 +0000</pubDate>
      <link>https://dev.to/jessachandler/making-a-simple-link-list-for-sharing-k32</link>
      <guid>https://dev.to/jessachandler/making-a-simple-link-list-for-sharing-k32</guid>
      <description>&lt;p&gt;&lt;em&gt;I originally published this with small differences on &lt;a href="http://jessachandler.com/2018/05/simple-link-list/" rel="noopener noreferrer"&gt;my own blog&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  You need a link page for your site!
&lt;/h2&gt;

&lt;p&gt;I see so many Instagram bios for developers that go to a homepage or don't include a quick way to get to where I am most interested in going on their site based on their post. Back in May, I coded up some link lists for two websites - one in Jekyll and the other in EJS. I shared the basic code and appearance on my blog, and now I want to share here to help other devs. &lt;/p&gt;

&lt;h3&gt;
  
  
  Why another page?
&lt;/h3&gt;

&lt;p&gt;I &lt;em&gt;knoooow&lt;/em&gt;, right? Another page. Don't we already have a navbar and a footer, and goodness knows how many other pages. However, it is nice for making a simple navigation for sharing across the increasingly mobile web - and almost essential for Instagram. Okay, I was entirely motivated to start working on this because of Instagram, but then I saw other potential uses.&lt;/p&gt;

&lt;p&gt;What we are creating here is just a page with a few links to key areas of your site that people are likely to want to self-direct after seeing &lt;em&gt;something else about you&lt;/em&gt;. I'll assume it is your Instagram feed. Just place the link for whatever you end up coding in your Instagram bio as your website. Use the same idea here to add temporary links for discounts or current blog posts, or whatever folks might be looking for. 😃&lt;/p&gt;

&lt;h2&gt;
  
  
  How to code it up
&lt;/h2&gt;

&lt;p&gt;I whipped this up for two sites, my blog in Jekyll, and my other site using EJS and Express. Since the setup for both was pretty straightforward but very different, I will share both here.&lt;/p&gt;

&lt;p&gt;The end result looks something like this on mobile.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fouxzucz9zmv2ox9vjayf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fouxzucz9zmv2ox9vjayf.png" alt="Preview of Jekyll and EJS links from this tut"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Jekyll Markdown
&lt;/h3&gt;

&lt;p&gt;My blog is written in jekyll with markdown. To set up a clean links page, I had to create a new layout and one new page.&lt;/p&gt;

&lt;p&gt;I needed a new layout because I did not have any existing layouts that would center everything on the page and not print the header and footer of my typical pages. I created a new layout called plain with no header and no footer. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;/layouts/plain.html&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
  {% include head.html %}
  &amp;lt;body&amp;gt;
    &amp;lt;div class="page-content"&amp;gt;
      &amp;lt;div class="wrapper"&amp;gt;
          &amp;lt;header class="post-header center"&amp;gt;
            &amp;lt;h1 class="post-title"&amp;gt;{{ page.title }}&amp;lt;/h1&amp;gt;
            &amp;lt;h5 class="post-description"&amp;gt;{{ page.description }}&amp;lt;/h5&amp;gt;
          &amp;lt;/header&amp;gt;
          &amp;lt;div class="center"&amp;gt;
            {{ content }}
          &amp;lt;/div&amp;gt;
      &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The markdown needs to include YAML to indicate that we are using our new plain layout, a title, link and description. I also have a &lt;code&gt;nav&lt;/code&gt; tag that is false if the page should now show up in the main navigation. Whether or not you need that depends on how your navbar and header is already coded. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;/pages/links.md&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;layout&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;plain&lt;/span&gt;
&lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Welcome&lt;/span&gt;
&lt;span class="na"&gt;permalink&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/links/&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;I can see you - just kidding&lt;/span&gt;
&lt;span class="na"&gt;nav&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;About&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;{{site.url}}/&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;{: .button .mylink}

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Code&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;{{site.url}}/code&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;{: .button .mylink}

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Travel&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;{{site.url}}/travel&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;{: .button .mylink}

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Projects&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;{{site.url}}/projects&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;{: .button .mylink}

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Blog&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;{{site.url}}/blog&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;{: .button .mylink}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The trailing &lt;code&gt;{:}&lt;/code&gt; code blocks are a way to put .css into markdown. I don't typically have css in my markdown pages, but I could not quite get the button look that I wanted without adding the css. If you use buttons more frequently in your jekyll site or plan to, this links page could go to a layout that loops over each link and creates a button instead. The exact css settings that I have here are:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* in /_sass/basscss/_base-buttons.scss */&lt;/span&gt;

&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nc"&gt;.button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;button-font-family&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;button-font-size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;button-font-weight&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;text-decoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;pointer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;inline-block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;box-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;border-box&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;line-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;button-line-height&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;button-padding-y&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;button-padding-x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="nb"&gt;transparent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;vertical-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;middle&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;-webkit-appearance&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nd"&gt;::-moz-focus-inner&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.button&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;text-decoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* in /_sass/_me.scss */&lt;/span&gt;

&lt;span class="nc"&gt;.mylink&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;theme-color&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#fff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.5em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;75%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;align-self&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  EJS/HTML/Express
&lt;/h3&gt;

&lt;p&gt;I maintain the &lt;a href="https://www.gifts-done.com" rel="noopener noreferrer"&gt;Gifts Done&lt;/a&gt; site with EJS and HTML with Express. The code for that was a different sort of straightforward. First, create a links page. I'm using EJS with views and pages. I'll not post the long &lt;code&gt;headernonav&lt;/code&gt; file but it is just the head meta and the start of the body tag. For this site, I am using Bootstrap 4, so I did not setup any special styles, the links are just part of a list-group.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;/views/pages/links.ejs&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;%&lt;/span&gt; &lt;span class="na"&gt;include&lt;/span&gt; &lt;span class="err"&gt;../&lt;/span&gt;&lt;span class="na"&gt;partials&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="na"&gt;headernonav&lt;/span&gt; &lt;span class="err"&gt;%&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tall"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"px-3 py-3 pt-md-5 pb-md-4 mx-auto text-center"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"navbar-brand brand-logo"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"/images/gifts-done-name.png"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"gifts-done logo"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"lead"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Automate your Gifting!&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"container list-group py-3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"list-group-item list-group-item-action"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Learn More&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/about"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"list-group-item list-group-item-action"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;About Us&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/users/login"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"list-group-item list-group-item-action"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Log In&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/suppliers"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"list-group-item list-group-item-action"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Become a Supplier&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"http://blog.gifts-done.com"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"list-group-item list-group-item-action"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Our Blog, The Wrap &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/faq"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"list-group-item list-group-item-action"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;FAQs&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/contact"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"list-group-item list-group-item-action"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Contact Us&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- footer --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;%&lt;/span&gt; &lt;span class="na"&gt;include&lt;/span&gt; &lt;span class="err"&gt;../&lt;/span&gt;&lt;span class="na"&gt;partials&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="na"&gt;footer&lt;/span&gt; &lt;span class="err"&gt;%&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"&lt;/span&gt; &lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The thing to remember in this situation is that you can't just create the page. You also need to add a route so that when someone goes to &lt;code&gt;http://yoursite/links/&lt;/code&gt; the server will know that you want to serve up the &lt;strong&gt;links&lt;/strong&gt; page that you made.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// routes/index.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;router&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;controller&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../controllers/index&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// IG LINKS&lt;/span&gt;
&lt;span class="nx"&gt;router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/links&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;show_links&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;// .. a bunch of other router stuff&lt;/span&gt;

&lt;span class="c1"&gt;// controllers/index.js&lt;/span&gt;
&lt;span class="c1"&gt;// .. other controller stuff&lt;/span&gt;
&lt;span class="nx"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;show_links&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pages/linkpage&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,{&lt;/span&gt; &lt;span class="na"&gt;page&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;landing&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Happy Listing - you can see this code in action on my bio from my &lt;a href="https://www.instagram.com/jess__chandler/" rel="noopener noreferrer"&gt;Instagram Feed&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You are not limited to just links on your site&lt;/strong&gt; Your custom link list page may include your portfolio at github, a collection on codepen, your most recent article here, whatever you can imagine. &lt;/p&gt;

&lt;p&gt;Please let me know how you extend this code. I'd love to see your work!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>jekyll</category>
      <category>showdev</category>
    </item>
    <item>
      <title>How can I preview emails on Apple Watch without one?</title>
      <dc:creator>Jess Chandler</dc:creator>
      <pubDate>Sat, 28 Apr 2018 08:30:52 +0000</pubDate>
      <link>https://dev.to/jessachandler/how-can-i-preview-emails-on-apple-watch-without-one-3p8k</link>
      <guid>https://dev.to/jessachandler/how-can-i-preview-emails-on-apple-watch-without-one-3p8k</guid>
      <description>&lt;p&gt;I'm testing email sent from my site, and I set up a separate text/watch section as advised. However, I do not have an apple watch. I'd like to see the emails before sending them to users who may have them.&lt;/p&gt;

&lt;p&gt;Any ideas?&lt;/p&gt;

&lt;p&gt;Ideally, I won't have to use the iOS simulator on my mac, but I will do that if it is the only way.&lt;/p&gt;

</description>
      <category>help</category>
    </item>
    <item>
      <title>Should I install the package or use the CDN? </title>
      <dc:creator>Jess Chandler</dc:creator>
      <pubDate>Sat, 14 Apr 2018 08:28:55 +0000</pubDate>
      <link>https://dev.to/jessachandler/should-i-install-the-package-or-use-the-cdn--4jia</link>
      <guid>https://dev.to/jessachandler/should-i-install-the-package-or-use-the-cdn--4jia</guid>
      <description>&lt;p&gt;I'm thinking particularly about chartjs right now, but it could apply to many things&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>Is there a sweet spot between SEO and DRY for site headers?</title>
      <dc:creator>Jess Chandler</dc:creator>
      <pubDate>Mon, 02 Apr 2018 23:25:45 +0000</pubDate>
      <link>https://dev.to/jessachandler/is-there-a-sweet-spot-between-seo-and-dry-for-site-headers-4ko3</link>
      <guid>https://dev.to/jessachandler/is-there-a-sweet-spot-between-seo-and-dry-for-site-headers-4ko3</guid>
      <description>&lt;p&gt;&lt;strong&gt;Smart peeps&lt;/strong&gt; - so, I have a question for you. Here's a hypothetical situation: &lt;/p&gt;

&lt;h2&gt;
  
  
  Situation
&lt;/h2&gt;

&lt;p&gt;You have done it, you have built a website. Cleverly, you have a partials folder with a header and footer and you just include that on every page. But, now every single page has the same meta tags. This makes the search engine algorithms push your site into the &lt;em&gt;land of boring repeat content&lt;/em&gt; - not good.&lt;/p&gt;

&lt;h2&gt;
  
  
  Solutions? &amp;lt;- this is where I want to put your thoughts!!!
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;NOTE: I will update this Solutions section with great answers from you guys!&lt;/strong&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Jekyll
&lt;/h3&gt;

&lt;p&gt;I have addressed this in jekyll for static sites by including liquid tags in the header that draws directly from the YAML during the build process. It is smooth and easy.&lt;/p&gt;

&lt;p&gt;In the /includes folder, I have a file called 'head.html' that is constructed like so:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
  &lt;span class="c"&gt;&amp;lt;!-- other head meta stuffs like width and utf--&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;{{ site.name }}{% if page.title and page.url != "/" %} | {{ page.title }}{% endif %}&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"description"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"{% if page.description %} | {{ page.description }}{% else %}{{ site.description }}{% endif %}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

   &lt;span class="c"&gt;&amp;lt;!-- other head stuffs like twitter and css --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;This 'head.html' is included as part of most page layouts in the /layouts folder, like so (this is 'default.html':&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
  {% include head.html %}
  &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    {% include header.html %}

    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"page-content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"wrapper"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        {{ content }}
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    {% include footer.html %}
  &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And then, in the pages, I can use YAML, like so:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;layout&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;default&lt;/span&gt;
&lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;space invaders in the wild&lt;/span&gt;
&lt;span class="na"&gt;permalink&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/spaceinvaders/&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;a gallery of space invaders that I have seen&lt;/span&gt;
&lt;span class="na"&gt;img&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;somedir/genericspaceinvader.png&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="gu"&gt;## My super duper header&lt;/span&gt;
My super duper content
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Now, this page will show up (to search engines...and eventually other humans) with the meta like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;  &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;ME: space invaders in the wild&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"description"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"a gallery of space invaders that I have seen"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Perhaps not the best for SEO, but not the same as all 20,000 other pages showing up as : 'Me' with a description of 'my description' or whatever. &lt;/p&gt;

&lt;h3&gt;
  
  
  How do you do it for other sites? Is there a similar approach?
&lt;/h3&gt;

</description>
      <category>discuss</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Your thoughts on Creating a New User </title>
      <dc:creator>Jess Chandler</dc:creator>
      <pubDate>Thu, 01 Mar 2018 02:57:26 +0000</pubDate>
      <link>https://dev.to/jessachandler/your-thoughts-on-creating-a-new-user--3nke</link>
      <guid>https://dev.to/jessachandler/your-thoughts-on-creating-a-new-user--3nke</guid>
      <description>&lt;p&gt;To handle the case when someone becomes a user of a paid web application, "we", as developers, need to take several steps: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;add them to the database &lt;/li&gt;
&lt;li&gt;verify their email &lt;/li&gt;
&lt;li&gt;send them a welcome message &amp;lt;- server&lt;/li&gt;
&lt;li&gt;charge them &lt;/li&gt;
&lt;li&gt;redirect them &lt;/li&gt;
&lt;li&gt;
&lt;em&gt;is there something else?&lt;/em&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most dev guides cover "add them to the database" and "redirect them". I have created all of the steps in my application. Naively, I took all of my steps and  plopped into the route handler for a new user. &lt;/p&gt;

&lt;p&gt;As I stand on the precipice of &lt;em&gt;really-this-matters&lt;/em&gt; development, I am wondering: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the &lt;strong&gt;order of operations&lt;/strong&gt; matter? (obviously, we don't want to redirect to an authenticated area before we actually make an account and charge them, but should we wait to create the account until they click on the "confirm" email?)&lt;/li&gt;
&lt;li&gt;Do you have a story from &lt;strong&gt;your experience&lt;/strong&gt;?&lt;/li&gt;
&lt;li&gt;If you verify email through verification service, do you still want to send a verify/confirm email email?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Am I missing something huge?&lt;/strong&gt; &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>What is your favorite way to automate new user welcome emails (node)? Why?</title>
      <dc:creator>Jess Chandler</dc:creator>
      <pubDate>Wed, 28 Feb 2018 04:24:11 +0000</pubDate>
      <link>https://dev.to/jessachandler/what-is-your-favorite-way-to-automate-new-user-welcome-emails-node-why--3a5f</link>
      <guid>https://dev.to/jessachandler/what-is-your-favorite-way-to-automate-new-user-welcome-emails-node-why--3a5f</guid>
      <description>&lt;p&gt;I've tried sendgrid, and I'm playing with nodemalier. I'm curious what mailers are really making devs happy. What do you like and why?&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>Explain deploying a web application Like I'm Five</title>
      <dc:creator>Jess Chandler</dc:creator>
      <pubDate>Sat, 10 Feb 2018 23:00:05 +0000</pubDate>
      <link>https://dev.to/jessachandler/explain-deploying-a-web-application-like-im-five--53fh</link>
      <guid>https://dev.to/jessachandler/explain-deploying-a-web-application-like-im-five--53fh</guid>
      <description>&lt;p&gt;Okay, I've deployed a few sites to github and a few others to heroku. But, I see suggestions (&lt;a href="https://stackoverflow.com/a/41252583/1259867"&gt;example&lt;/a&gt;) to deploy the front-end to one place and the back-end somewhere else, and I really do not understand. Do I need to be doing this?&lt;/p&gt;

</description>
      <category>explainlikeimfive</category>
    </item>
  </channel>
</rss>
