<?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>Forem: Katie Adams</title>
    <description>The latest articles on Forem by Katie Adams (@katieadamsdev).</description>
    <link>https://forem.com/katieadamsdev</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%2F155244%2Ff50dc992-c59d-4b4d-aa37-22bf14a5571f.jpg</url>
      <title>Forem: Katie Adams</title>
      <link>https://forem.com/katieadamsdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/katieadamsdev"/>
    <language>en</language>
    <item>
      <title>Animated list with sliding background</title>
      <dc:creator>Katie Adams</dc:creator>
      <pubDate>Tue, 16 Feb 2021 08:35:50 +0000</pubDate>
      <link>https://forem.com/katieadamsdev/animated-list-with-sliding-background-30f6</link>
      <guid>https://forem.com/katieadamsdev/animated-list-with-sliding-background-30f6</guid>
      <description>&lt;p&gt;On Twitter recently, I announced the creation of my first ever codepen! 🎉&lt;br&gt;
&lt;iframe height="600" src="https://codepen.io/katie-adams/embed/NWbRaPg?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The point of the codepen was to solve a problem I encountered in a Vue project, wherein I'd been tasked with creating an animation I'd never done before. The brief was a pill-like shape that was animated to slide between items when a new one is selected (see the above codepen). CSS animation is not my strong suit; simultaneously learning Vue 3 and the composition API made an already new thing seem even more daunting.&lt;/p&gt;

&lt;p&gt;Hence the codepen. My intention was to strip the process back and attempt to achieve the intended result for with good ol' plain JavaScript. And it seemed to work!&lt;/p&gt;

&lt;p&gt;So how did it look once I'd translated it back into Vue? Well, it looked like this:&lt;br&gt;
&lt;iframe height="600" src="https://codepen.io/katie-adams/embed/oNYYOwd?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Let's dive a little further in and see what's happening.&lt;/p&gt;

&lt;p&gt;The HTML is relatively straightforward to any Vue veteran. We've got an unordered list with a series of list items. Each list item is populated with the name of a Pokemon (lovingly taken from the &lt;a href="https://pokeapi.co/"&gt;PokeAPI&lt;/a&gt;. There's a couple of wrapper &lt;code&gt;div&lt;/code&gt; tags, predominantly for styling but one of them houses the &lt;code&gt;ul&lt;/code&gt; and a &lt;code&gt;span&lt;/code&gt; that will act as our coloured pill element.&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;span
        id="categoryBackground"
        role="presentation"
        class="transition-all duration-300 ease-in-out z-0 absolute rounded-full bg-red-700"
      /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This funky little dude is going to zoom around behind the various list items, happily animated and colourful. Note the &lt;code&gt;role&lt;/code&gt; attribute too, letting screen readers know that this is just for show. &lt;/p&gt;

&lt;p&gt;Styling is done in Tailwind so I won't delve into that any more than is necessary.&lt;/p&gt;

&lt;p&gt;So: the meaty stuff. The nitty gritty. The Javascript. Tasty stuff.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { ref, computed } from "vue";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This line brings in some of the Composition API 'stuff' that is available in Vue 3. I recommend reading &lt;a href="https://www.danvega.dev/blog/2020/02/12/vue3-ref-vs-reactive/"&gt;Dan Vega's post&lt;/a&gt; on the Ref and there's also some good &lt;a href="https://v3.vuejs.org/guide/computed.html#computed-caching-vs-methods"&gt;documentation&lt;/a&gt; on Computed Refs too. Long story short, they're reactive. So if you find yourself using data from the VueX store where the content might change frequently, then your data should reflect it when we use these variable types.&lt;/p&gt;

&lt;p&gt;The beauty of the &lt;code&gt;computed&lt;/code&gt; variable type is that it is reactive (just like the &lt;code&gt;ref&lt;/code&gt;) but it also keeps an eye on the data that it depends on. So when that dependent data changes, it updates itself! Pretty cool, right?&lt;/p&gt;

&lt;p&gt;In our &lt;code&gt;setup()&lt;/code&gt; function, we define a few reactive variables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An array of &lt;code&gt;categories&lt;/code&gt;, filled with Pokemon names&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;selectedCategoryName&lt;/code&gt;, a self-explanatory string&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;selectedCategoryElement&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;categoryBackground&lt;/code&gt;, which just returns our little decorative span element from the DOM&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;selectedCategoryElement&lt;/code&gt; will also return a DOM element but it does so using the selectedCategoryName to make sure it's picking up the element with the matching id.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We'll come back to the &lt;code&gt;selectedCategoryElement&lt;/code&gt; variable. It uses a function that is worth going over first:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function updateCategoryBackground(category) {
      selectedCategoryElement = document.querySelector(
        `#category${category.name}`
      );
      if (selectedCategoryElement &amp;amp;&amp;amp; categoryBackground.value) {
        categoryBackground.value.style.width =
          selectedCategoryElement.scrollWidth + "px";
        categoryBackground.value.style.height =
          selectedCategoryElement.scrollHeight + "px";
        categoryBackground.value.style.left = selectedCategoryElement.offsetLeft + "px";
      }
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is our &lt;code&gt;updateCategoryBackground()&lt;/code&gt; function. This bad boy works the magic we're looking for with this animation. Firstly, it updates our &lt;code&gt;selectedCategoryElement&lt;/code&gt; variable with the DOM element of the clicked category. Then, provided that this new element actually &lt;em&gt;exists&lt;/em&gt; and that our decorative &lt;code&gt;span&lt;/code&gt; was successfully found too, it updates the stylings of the latter to match the former! So if the Bulbasaur button is clicked, then our pill-shaped doodad will be told what size the button is and where it is, and he'll rush to copy.&lt;/p&gt;

&lt;p&gt;Thanks to the Tailwind classes on the decorative &lt;code&gt;span&lt;/code&gt;, any transformations that occur on it - such as changes in size or position - are animated in an ease-in and ease-out fashion. Stupidly simple stuff but possibly not for someone who's never done it before. &lt;/p&gt;

&lt;p&gt;So when does the &lt;code&gt;updateCategoryBackground()&lt;/code&gt; function even get called? Well, we've got another function called &lt;code&gt;selectedCategoryChanged()&lt;/code&gt;. Take another look at the unordered list in our template:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@click="selectedCategoryChanged(category)"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each list item has an click event handler that uses - you guessed it - the &lt;code&gt;selectedCategoryChanged()&lt;/code&gt; function. This function updates the name of the selected value, thus updating the computed functions that rely on it. Then it calls the &lt;code&gt;updateCategoryBackground()&lt;/code&gt; function to move our funky little pill around the screen!&lt;/p&gt;

&lt;p&gt;I purposefully left the &lt;code&gt;selectedCategoryElement&lt;/code&gt; variable until last because it does a couple of different things.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Vue.nextTick(() =&amp;gt; {
        updateCategoryBackground(
          categories.value.find(
            (cat) =&amp;gt; cat.name === selectedCategoryName.value
          )
        );
      });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, it calls the &lt;code&gt;updateCategoryBackground()&lt;/code&gt; function but is encapsulated in this &lt;code&gt;Vue.nextTick()&lt;/code&gt; arrow function. The &lt;code&gt;nextTick()&lt;/code&gt; function pushes back when the code runs. &lt;strong&gt;It waits until the DOM has rendered.&lt;/strong&gt; This is important because the &lt;code&gt;updateCategoryBackground&lt;/code&gt; function updates the style attribute of our decorative &lt;code&gt;span&lt;/code&gt;. It's important that we know it will even be there to receive our update, otherwise we'll get a whole range of error messages.&lt;/p&gt;

&lt;p&gt;Lastly, it returns the selected category from the DOM to ensure we have a default value when the app is first loaded. In this case, "Bulbasaur".&lt;/p&gt;

&lt;p&gt;And that's it!&lt;/p&gt;

&lt;p&gt;There's obviously a lot of ways this can be expanded to include different features and include different stylings. For instance, you can quite easily switch this up to include the usage of the Vuex store!&lt;/p&gt;

&lt;p&gt;Let me know if you use this elsewhere or have a play yourself. It'd be great to see what improvements or changes get made!&lt;/p&gt;

</description>
      <category>vue</category>
      <category>javascript</category>
      <category>tailwindcss</category>
      <category>animation</category>
    </item>
    <item>
      <title>Configuring the Storyblok Bridge in TypeScript</title>
      <dc:creator>Katie Adams</dc:creator>
      <pubDate>Wed, 14 Oct 2020 15:56:37 +0000</pubDate>
      <link>https://forem.com/katieadamsdev/configuring-the-storyblok-bridge-in-typescript-hmm</link>
      <guid>https://forem.com/katieadamsdev/configuring-the-storyblok-bridge-in-typescript-hmm</guid>
      <description>&lt;p&gt;If you've not worked with Storyblok before: go away. Do it. Supplement your technological arsenal with something unexpectedly fantastic. You won't regret it, I promise. I thoroughly recommend it. &lt;/p&gt;

&lt;p&gt;I've given a very, &lt;em&gt;very&lt;/em&gt; brief description below of what Storyblok is and what it does well. This article looks specifically, however, at the Storyblok Bridge and how to configure it in Typescript, as opposed to Javascript. As such, the article assumes you have a project set up and simply need to convert the JavaScript boilerplate code into TypeScript.&lt;/p&gt;

&lt;p&gt;Now that the introductory waffle is out of the way, I welcome you, weary traveller. Come share the warmth of my Mac as it tries to join a Teams meeting. Stay a while and rest, and I shall tell you the tale... of the Storyblok Bridge.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Storyblok?
&lt;/h2&gt;

&lt;p&gt;Storyblok is a Headless CMS that structures its content as Bloks - reusable components containing fields (i.e. text, image, markdown, another Blok, etc) - that can be inserted into a page and edited at will. &lt;/p&gt;

&lt;p&gt;What makes Storyblok special, however, is its Live Editor. Unlike any other CMS, changes made to the content are visible on the webpage as they happen. &lt;/p&gt;

&lt;p&gt;That's right: thanks to the power of the Storyblok Bridge, we can see these changes happening right in front of our eyes. &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fgfr17m9agawll29fbfm2.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fgfr17m9agawll29fbfm2.gif" alt="A gif showing the live editor of Storyblok"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I could warble away about the wonders of Storyblok for time immemorial but I shall digress for now. After all, your content editors will not write any code but we will. That's why you're here after all!&lt;/p&gt;

&lt;h2&gt;
  
  
  The Code
&lt;/h2&gt;

&lt;p&gt;A project that I worked on recently leveraged Storyblok with Nuxt.js. As you can imagine, the concept of Bloks (reusable components) lends itself very well to Vue and thus Nuxt. However, this is not a tutorial about how to make that kind of project; &lt;a href="https://www.storyblok.com/docs#beginner-tutorials" rel="noopener noreferrer"&gt;Storyblok has several of their own&lt;/a&gt;. They even offer &lt;a href="https://github.com/storyblok/bootstrap-nuxt-demo" rel="noopener noreferrer"&gt;starter code&lt;/a&gt; for a lot of frameworks!&lt;/p&gt;

&lt;p&gt;The boilerplate code for Nuxt, however, is written in JavaScript. So what if we don’t want JavaScript? What if we want her stricter, stronger cousin?&lt;/p&gt;

&lt;h3&gt;
  
  
  TypeScript Storyblok Bridge
&lt;/h3&gt;

&lt;p&gt;Ta da! A Storyblok Bridge connection made with TypeScript:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;As you can see, the code performs exactly the same as it would in JavaScript. It has no extra or different functionality but is simply a less error-prone version.&lt;/p&gt;

&lt;p&gt;Let's dive deeper.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exploring the Code
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Vue 3.0 and the Composition API
&lt;/h3&gt;

&lt;p&gt;The TypeScript code makes use of the &lt;a href="https://composition-api.vuejs.org/#summary" rel="noopener noreferrer"&gt;Composition API&lt;/a&gt; from Vue 3.0. One of these is the Ref function. You can see this is imported with the Vue 3.0 lifecycle hooks at the top of the file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { defineComponent, useFetch, useContext, ref, onMounted } from '@nuxtjs/composition-api'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;onMounted&lt;/code&gt; and &lt;code&gt;$storybrige.on()&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The onMounted function is where most of the functionality occurs. Within this, we're calling the &lt;code&gt;$storybridge.on()&lt;/code&gt; function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.$storybridge.on('input', (event: StoryblokEventPayload)...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This acts like a listener for events, of the type &lt;code&gt;StoryblokEventPayload&lt;/code&gt;. &lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;StoryblokEventPayload&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;The &lt;code&gt;StoryblokEventPayload&lt;/code&gt; type is an interface exposed through the &lt;code&gt;index.d.ts&lt;/code&gt; file that can be found in the Storyblok-Nuxt module. This file is imported at the top of the script tag.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import 'storyblok-js-client/dist/index'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can view this file for yourself by navigating to the &lt;code&gt;storyblok-nuxt&lt;/code&gt; folder within &lt;code&gt;node_modules&lt;/code&gt; and looking in the &lt;code&gt;dist&lt;/code&gt; directory. &lt;/p&gt;

&lt;h3&gt;
  
  
  Detecting Changes
&lt;/h3&gt;

&lt;p&gt;Within the &lt;code&gt;$storybridge.on()&lt;/code&gt; function, we're detecting an event such as &lt;code&gt;input&lt;/code&gt;, &lt;code&gt;published&lt;/code&gt;, or &lt;code&gt;change&lt;/code&gt;, and then handling the action accordingly. &lt;/p&gt;

&lt;h4&gt;
  
  
  Input
&lt;/h4&gt;

&lt;p&gt;When detecting any form of &lt;code&gt;input&lt;/code&gt;, we're testing whether the event ID of our project's content matches the event ID of the changed content on Storyblok. If this is true, then the two contents are matched up.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (event.story.id === story.value.id) {
   story.value.content = event.story.content
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Change or Published
&lt;/h4&gt;

&lt;p&gt;If the changes are saved or 'published', then we force a reload of the &lt;code&gt;currentRoute&lt;/code&gt; to manually refresh and update our view to the latest version.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.$nuxt.$router.go({
   path: app.$nuxt.$router.currentRoute,
   force: true
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;And that's it! There was a bit of head-scratching about the what type to make some of this code, specifically the &lt;code&gt;StoryblokEventPayload&lt;/code&gt; event. We also had some fun with getters when accessing the value of the &lt;code&gt;story&lt;/code&gt; ref, using the new Composition API. &lt;/p&gt;

&lt;p&gt;However, this code will now hopefully help anyone in a similar predicament and save you some time too.&lt;/p&gt;

&lt;p&gt;Storyblok possesses a multitude of great features for both little and large scale projects. I've listed a few down below, and I seriously recommend that you check them out if you're able. They're doing some pretty awesome things. &lt;/p&gt;

&lt;h3&gt;
  
  
  Cool Storyblok Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Live Editor&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.storyblok.com/docs/image-service" rel="noopener noreferrer"&gt;Image Service&lt;/a&gt; (Through their Image API, a 3.5MB image was passed to my app as a ridiculously tiny 25KB image and then automatically cached, improving page load speeds insurmountably).&lt;/li&gt;
&lt;li&gt;Support for many, many frameworks&lt;/li&gt;
&lt;li&gt;They are a huge backer of VueJS&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.storyblok.com/docs/plugins" rel="noopener noreferrer"&gt;Custom plugins&lt;/a&gt; (You can customise a Blok's fields entirely to your specifications. Imagine a custom built dropdown menu populated with options FETCHed from an API).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If this is helpful, please let me know with a comment or by reaching out on Twitter. I'd love to see what you're creating with Storyblok, especially if this code has been useful to you. &lt;/p&gt;

</description>
      <category>vue</category>
      <category>nuxt</category>
      <category>storyblok</category>
      <category>typescript</category>
    </item>
    <item>
      <title>My Portfolio: Rate and Review</title>
      <dc:creator>Katie Adams</dc:creator>
      <pubDate>Mon, 17 Aug 2020 15:00:22 +0000</pubDate>
      <link>https://forem.com/katieadamsdev/my-portfolio-rate-and-review-269n</link>
      <guid>https://forem.com/katieadamsdev/my-portfolio-rate-and-review-269n</guid>
      <description>&lt;h2&gt;
  
  
  Baby Got Backstories
&lt;/h2&gt;

&lt;p&gt;Ah, my first website. When I was but a bairn (an 18 year old bairn with a metric ton of fairy lights and crippling social anxiety - but a bairn nevertheless!)&lt;/p&gt;

&lt;p&gt;'Twas a first-year university assignment, in a class called Web Concepts. For the sake of brevity, I shall describe the website I produced simply as 'a bit shit'. Whilst it was technically acceptable - responsive, fast, accessible - the design and UX left something to be desired. It lacked personality. It was bland and uninteresting. The graphic design was poor (I was not nor am I now an artist).&lt;/p&gt;

&lt;p&gt;To give myself &lt;em&gt;some&lt;/em&gt; credit, I'd arrived at university with very little programming experience. It consisted of little more than an Avengers: Age of Ultron game I'd created with Visual Basics.&lt;/p&gt;

&lt;p&gt;As well as that, there were elements of the assignment which demanded time and focus be drawn away from the site as a whole.&lt;/p&gt;

&lt;p&gt;For instance, my lecturer insisted that to demonstrate my skills, I ought to have a &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; element with an animated story playing upon it. Admittedly, such a task was not high on my list of priorities this time around. &lt;/p&gt;

&lt;p&gt;(If you must know, the story I produced was that of a Pink Balloon at a Blue Balloon party. Naturally, she felt isolated until she floated her way into the gaze of another Pink Balloon. I've been fending off calls from Spielberg ever since.)&lt;/p&gt;

&lt;p&gt;But alas, I digress. &lt;/p&gt;

&lt;p&gt;All of this is a way for me to say in a round about way (in a swirly whirly kind of way, if you like) that I've come leaps and bounds in web development. I'm now feeling pride in the things I create.&lt;/p&gt;

&lt;p&gt;In the last few years, and particularly during quaratine, my knowledge of web design principles, current web trends, new web technologies, and many other helpful concepts has improved exponentially.&lt;/p&gt;

&lt;p&gt;I've settled firmly into the knowledge that the role of Front-end Developer is the role for me. And I can't wait to really get stuck in. &lt;/p&gt;

&lt;h2&gt;
  
  
  To Boldly Go Where Everyone Has Gone At Least Once Before (Probably)
&lt;/h2&gt;

&lt;p&gt;So without further ado, welcome to &lt;a href="https://katieadams.uk"&gt;my website&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;As far as I'm concerned, this is merely the beginning of my portfolio. The basis. The foundation. Imagine my portfolio as an infant: toddling around the interweb, its tubby, infantile fists reaching out for purchase. They protrude from some disgustingly vibrant and questionably matched clothing that I, their adoring mother, decided were 'quite sweet'.&lt;/p&gt;

&lt;p&gt;If you're willing and able, I'd love to hear what you think. Whether it pertains to accessibility or responsiveness or something else entirely, I'd really appreciate any feedback you'd care to share. &lt;/p&gt;

&lt;p&gt;Even if it's positive! Cure my Imposter Syndrome with repeated validation and positive affirmations. Whatever floats your boat, really!&lt;/p&gt;

&lt;h2&gt;
  
  
  Feedback I've had
&lt;/h2&gt;

&lt;p&gt;I've shared my portfolio in a few other avenues too and this is some of the feedback I've already had:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Move the skills section further up the homepage. The site is already indicative of who you are; show them what you can &lt;em&gt;do&lt;/em&gt;. &lt;/li&gt;
&lt;li&gt;Looking clean! Super slick on mobile too.&lt;/li&gt;
&lt;li&gt;Have a more prominent 'Contact Me' call-to-action on mobile. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Please feel free to leave a comment below and let me know what you think. I wait anxiously behing my keyboard to either cry out in despair, jump for joy, or... &lt;/p&gt;

&lt;p&gt;Nope, I think that's pretty much it. No inbetweens. &lt;/p&gt;

&lt;p&gt;Thank you in advance!&lt;/p&gt;

</description>
      <category>vue</category>
      <category>portfolio</category>
      <category>feedback</category>
      <category>webdev</category>
    </item>
    <item>
      <title>WasteAway: An Android Recycling App</title>
      <dc:creator>Katie Adams</dc:creator>
      <pubDate>Mon, 20 Apr 2020 14:42:01 +0000</pubDate>
      <link>https://forem.com/katieadamsdev/wasteaway-an-android-recycling-app-1bff</link>
      <guid>https://forem.com/katieadamsdev/wasteaway-an-android-recycling-app-1bff</guid>
      <description>&lt;p&gt;University has been a long, four-year journey but I'm finally nearing the end.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And I've just published my first ever mobile app.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Over the last few weeks, I've been learning React Native as part of my final year project at Staffordshire University. It's been gruelling and tough and at times I've had no motivation at all. &lt;em&gt;Nevertheless, she persisted.&lt;/em&gt; If you're that way inclined, you can &lt;a href="https://github.com/kitella1/FYP-Logs"&gt;read the code logs&lt;/a&gt; that I produced over the entire process. They're not exactly page turners; I read a &lt;em&gt;lot&lt;/em&gt; of research papers for several months whilst designing this app and it shows. They do, however, document my entire thought process for the creation of this application.&lt;/p&gt;

&lt;p&gt;Now, after many months of blood, sweat, and tears, &lt;a href="https://wasteaway-fyp.web.app/#/"&gt;WasteAway is on the Google Play Store&lt;/a&gt; - and I need help.&lt;/p&gt;

&lt;p&gt;My dissertation is focused around the climate crisis and how to reduce household impact on it. WasteAway was designed to encourage household recycling, using the principles of Gamification to do so. Users can earn points by recycling everyday household items and entering the global leader board to compete for the top spot.&lt;/p&gt;

&lt;p&gt;I'm in need of Android users to download and test the app. Currently, I've got a small pool of friends and peers who are using the app daily and reporting bugs but the more the merrier.&lt;/p&gt;

&lt;p&gt;The website specifies the criteria for participation so please &lt;a href="https://wasteaway-fyp.web.app/#/"&gt;check it out&lt;/a&gt;. I've also listed the steps to participate below:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Download the application from the Google Play Store.&lt;/li&gt;
&lt;li&gt;Fill out the &lt;a href="https://staffordshire.eu.qualtrics.com/jfe/form/SV_cverB4XpSYpUx4p"&gt;Preliminary Questionnaire&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Use the application for at least 7 days.&lt;/li&gt;
&lt;li&gt;If you experience any problems, errors, or bugs, please report them using the &lt;a href="https://staffordshire.eu.qualtrics.com/jfe/form/SV_0UmnJgckERM24XX"&gt;Bug Report Form&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Once you've completed the minimum test period, fill out the &lt;a href="https://staffordshire.eu.qualtrics.com/jfe/form/SV_1XiTKdkdZDLIRnf"&gt;Application Review Questionnaire&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Testing will end on the 27th of April. Please ensure your bugs are reported and that an Application Review Questionnaire has been filled out by then.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I'm so excited to see my creation on the Google Play Store; 'Watch This Space' as TeaCosy Creations will absolutely be making and publishing more apps where I'm able. I've definitely caught the bug. It's a little surreal to see an app that &lt;em&gt;I've&lt;/em&gt; created on a store with so many &lt;em&gt;actual&lt;/em&gt; developers. Currently, I'm suffering from some childlike giddiness.&lt;/p&gt;

&lt;p&gt;WasteAway may be a little rough around the edges but I'm looking to polish it in the second iteration of development. Please, if you're willing and able, consider helping me do so. I'd really appreciate it. &lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>android</category>
      <category>jsx</category>
      <category>testing</category>
    </item>
    <item>
      <title>Development Environment: Windows or MacOS?</title>
      <dc:creator>Katie Adams</dc:creator>
      <pubDate>Sat, 11 Jan 2020 22:07:14 +0000</pubDate>
      <link>https://forem.com/katieadamsdev/development-environment-windows-or-macos-5cfd</link>
      <guid>https://forem.com/katieadamsdev/development-environment-windows-or-macos-5cfd</guid>
      <description>&lt;p&gt;Perhaps it's just me; I have no preference at all. I can flip between Catalina and Windows 10 like a acrobat in the circus. It's as close as I will come to being an acrobat in any sense, I assure you.&lt;/p&gt;

&lt;p&gt;However, I'm genuinely curious: which environment do you prefer as a developer? &lt;/p&gt;

&lt;p&gt;The question truly occured to me when I was redesigning my portfolio. Using the excellent site &lt;a href="//unsplash.com"&gt;Unsplash&lt;/a&gt; for a placeholder background began to show a pattern. A lot of the images that appeared for the result 'web development' contained Macbooks. It wasn't familiar to me - nor was it indicative of my development experience.&lt;/p&gt;

&lt;p&gt;I've invested a lot into my Windows setup but that's because I also spend my time playing some big ol' games. Many of my peers, however, exclusively work on Macbooks. I oft wonder if it would be worth the investment one day.&lt;/p&gt;

&lt;p&gt;So what made you choose one way or another? Is it the software that's available? The aesthetic and appearance? The hardware? The ease of use?&lt;/p&gt;

&lt;p&gt;Or are you like me? Have you no preference at all? And why is that? Personally, I worked as an IT technician for 12 months; I was hands-on with the guts of both Apple devices and others. By the end of the year, I was comfortable with most Operating Systems.&lt;/p&gt;

&lt;p&gt;I'm not necessarily looking for a definitive answer but, like mine, more anecdotal, personal experiences. So: why do &lt;em&gt;you&lt;/em&gt; prefer &lt;em&gt;your&lt;/em&gt; environment?&lt;/p&gt;

</description>
      <category>linux</category>
      <category>apple</category>
      <category>microsoft</category>
      <category>operatingsystem</category>
    </item>
    <item>
      <title>Arrested (Web) Development - Part 3</title>
      <dc:creator>Katie Adams</dc:creator>
      <pubDate>Sun, 24 Nov 2019 15:09:01 +0000</pubDate>
      <link>https://forem.com/katieadamsdev/arrested-web-development-part-3-5acn</link>
      <guid>https://forem.com/katieadamsdev/arrested-web-development-part-3-5acn</guid>
      <description>&lt;h5&gt;
  
  
  Click here for the last part of this series:
&lt;/h5&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/katieadamsdev" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F155244%2Ff50dc992-c59d-4b4d-aa37-22bf14a5571f.jpg" alt="katieadamsdev"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/katieadamsdev/arrested-web-development-part-2-m6n" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Arrested (Web) Development - Part 2&lt;/h2&gt;
      &lt;h3&gt;Katie Adams ・ Oct 14 '19&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#web&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#html&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#css&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#vanilla&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;It's been a busy few weeks for this web developer. My partner is recovering from surgery, I passed another Microsoft Office Specialist exam - this time for Powerpoint 2019 - and my deadlines are getting ever closer; I even decided to start learning Swedish! ('Kvinnan läser och talar svenska')&lt;/p&gt;

&lt;p&gt;My brain feels about ready to burst - and my skull has regretfully informed me that this would not be advisable.&lt;/p&gt;

&lt;p&gt;So, to try and unwind, I've set myself the challenge of producing another post in this series. And this time: it'll be real nerdy.&lt;/p&gt;

&lt;h1&gt;
  
  
  Arrested Web Development: Part 3
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Archive of our Own
&lt;/h2&gt;

&lt;p&gt;For those of you who weren't active in the fanfiction community at any point, then you might need a little bit of background on what Archive of our Own (AO3) is. I can unashamedly say that I was a fanfiction writer/reader for many years and am happy to be your guide. &lt;/p&gt;

&lt;p&gt;AO3 is an open-source fanfiction publication website, run by the Organisation for Transformative Works (OTW). OTW describe themselves as "&lt;a href="https://archiveofourown.org/about" rel="noopener noreferrer"&gt;a nonprofit organization, established by fans in 2007, to serve the interests of fans by providing access to and preserving the history of fanworks and fan culture in its myriad forms&lt;/a&gt;".&lt;/p&gt;

&lt;p&gt;I want to preface this article by saying that I have an incredible amount of respect for the team behind AO3. It is run by dedicated volunteers and solely survives on yearly donation drives. It's a credit to them and their site that every year they meet their targets through fan support alone. &lt;/p&gt;

&lt;p&gt;A major perk of AO3 that I discovered very early-on in my developing career was the option to skin the site. It wasn't something I'd truly seen applied outside of Tumblr (is my nerd side showing yet?) so I was intrigued and began to play. &lt;/p&gt;

&lt;p&gt;It is within the context of skins that I will be discussing AO3's site design in this post. Every aspect of the site that I suggest improvements for, I will apply. No empty comments. I'll make the change I want to see and show you the code to do it.&lt;/p&gt;

&lt;p&gt;Over the last few months, I've been polishing an AO3 skin of my own that I imaginatively called 'Moderno'; it's purpose is to give a more modern web look for AO3. This is the skin I will use to make changes.&lt;/p&gt;

&lt;p&gt;At the end, I will link to a GitHub repository with the CSS for Moderno in full. If you want to apply the skin to AO3 yourself, then the code will be freely available. Equally, if you want to fork the repository and suggest changes or code that I've missed, please do so.&lt;/p&gt;

&lt;p&gt;In no way do I expect the developers to perform any of the changes I've suggested (should they ever discover this post). A complete site overhaul is a massive amount of work and they already do so much by keeping the site working as flawlessly as they do. &lt;/p&gt;

&lt;p&gt;And so, with all of the preliminary information out of the way, let's get started!&lt;/p&gt;

&lt;h3&gt;
  
  
  The Best Bits
&lt;/h3&gt;

&lt;p&gt;Where to begin?&lt;/p&gt;

&lt;p&gt;The font choice for AO3 is predominantly 'Times New Roman'. An absolute classic. The choice for a serif font makes for easy legibility and gives the site the air of a classic novels. A stylistic choice, for sure, but I'll get into that a bit later.&lt;/p&gt;

&lt;p&gt;The readability for the typography around the site is pretty good: high-contrast between the font and the backgrounds. In fact, the accessibility score for the whole site is pretty decent. &lt;br&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%2Fmwxuh0sntj0t0zq2u8df.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%2Fmwxuh0sntj0t0zq2u8df.PNG" alt="The Google Lighthouse Audit report for Archive of Our Own"&gt;&lt;/a&gt;&lt;br&gt;
Google Lighthouse scores it at 78 out of 100. Search Engine Optimisation scores a whopping 100 and Best Practices reaches 93. The area that apparently needs a little improvement is the site's performance; this is likely on account of the jQuery that's used in place of a Javascript Framework. &lt;/p&gt;

&lt;p&gt;In-text links are clearly highlighted with underlines, solid or dotted.&lt;/p&gt;

&lt;p&gt;The site's brand is also clear throughout the whole site, with its signature shade of red appearing in borders, headings, and highlights. &lt;/p&gt;

&lt;p&gt;As much as I could gush about the site, I do want to get onto the things I changed with 'Moderno'. That's why many of you are reading, no?&lt;/p&gt;

&lt;p&gt;A lot of the style choices on AO3 are as a result of building a style. As I mentioned, the serif font emulates an Austen-style book. However, for the modern web, this isn't always preferable. The site itself feels dated.&lt;/p&gt;

&lt;p&gt;There are techniques used in the site design that have since moved on. &lt;/p&gt;

&lt;p&gt;For instance, a lot of grey is used on the site to differentiate between sections.&lt;br&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%2Fdohiqav2gqnaqmtytny0.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%2Fdohiqav2gqnaqmtytny0.PNG" alt="The 'Fandoms' section of an AO3 user's dashboard. The padding is coloured with a light grey."&gt;&lt;/a&gt;&lt;br&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%2Fid1e95u74c8tr6pogmhm.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%2Fid1e95u74c8tr6pogmhm.PNG" alt="The dropdown of a menu item, whose background is completely grey."&gt;&lt;/a&gt;&lt;br&gt;
There are also a lot of sharp corners, hard edges, and 3D styled buttons. Most of these I am able to address with a skin.&lt;/p&gt;

&lt;p&gt;Firstly, I will delve a little further into the typography. As well as 'Times New Roman' there are elements of the site that also use the sans-serif font: 'Lucida Grande'. The use of multiple fonts was the first thing I fixed, setting everything to 'Lucida Grande' as the more modern font of the two. &lt;/p&gt;

&lt;p&gt;Next, I looked at colour usage. Dark grey backgrounds are used in sections like the menu dropdowns; this can reduces accessibility by using dark text over the top of a dark background, reducing contrast. In Moderno, this is amended by simply changing the background colour to #fff.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#header .menu,
#small_login,
#header .dropdown:hover .current + .menu {
  background: #fff;
  box-shadow: 14px 21px 15px -17px rgba(0,0,0,0.75);
  border-radius: 0px 0px 3px 3px;
} 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;It is the dropdown menu that is coloured and each menu item is left transparent. A box-shadow behind the dropdown menu makes it appear into as though the menu item is &lt;em&gt;above&lt;/em&gt; the rest of the site. It's a little trick improves the usability of the site. Lastly, I rounded the corners of the dropdown a little using the &lt;code&gt;border-radius&lt;/code&gt; CSS. This makes the menu appear a little more modern with not a lot of code.&lt;/p&gt;

&lt;p&gt;The last trick I applied to the dropw down menu is some animation. Rather than highlight which menu item is being hovered over with a partially transparent colour, I decided to use the &lt;code&gt;transition&lt;/code&gt; property.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#header .menu li {
  border: none;
  transition: border 100ms linear;
} 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;When the user hovers over a menu item, the left-hand side of the menu item slides in with a red border.&lt;/p&gt;

&lt;p&gt;The final result of the dropdown menu looks like the below:&lt;br&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%2Feyk0fxt5id6yoi9865fs.gif" 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%2Feyk0fxt5id6yoi9865fs.gif" alt="Users hovers over dropdown menu, revealing a red left border that slides in on each menu item"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My next task was tackling the use of textures throughout the site. A common web trend at the moment is smooth clean colours in graphics. The footer on AO3 and the navigation bar have a textured red background that looks a little dated on the 2019 web space. &lt;br&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%2Fiik6the2y20mnit3a6xo.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%2Fiik6the2y20mnit3a6xo.PNG" alt="A screenshot of the AO3 navigation bar that shows the textured red background"&gt;&lt;/a&gt;&lt;br&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%2Fs7mvpwdblyci1nnxkrgx.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%2Fs7mvpwdblyci1nnxkrgx.PNG" alt="A screenshot of the AO3 footer that shows the textured red background"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Rather than just apply a solid colour to these sections, I did a couple of different things to shake things up.&lt;/p&gt;

&lt;p&gt;Firstly, I made the header of the website sticky. Something I have personally experienced as a user is that I will be browsing search results, not find the fanfiction I'm looking for, and want to search something else. When on mobile, scrolling all the way back up to the top feels quite tedious, quite quickly.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#header {
  position: sticky;
  top: 0;
  box-shadow: 5px 0px 18px #888888;
  background: #fff;
  z-index: 1;
} 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;In this example, I used &lt;code&gt;position: sticky&lt;/code&gt; but be sure to check &lt;a href="https://caniuse.com/" rel="noopener noreferrer"&gt;caniuse.com&lt;/a&gt; as there are a few bugs on modern browsers with this, as well as just being completely unsupported on IE.&lt;/p&gt;

&lt;p&gt;I've also added another box-shadow to the header so that, much like the menu dropdown, the illusion is given of the header floating above the site.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#header .primary {
  background: #990000;
  box-shadow: none;
} 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The resultant appearance looks like the below:&lt;br&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%2F9cas4dmqt59yejouy7wp.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%2F9cas4dmqt59yejouy7wp.PNG" alt="The skinned header with a box shadow and gradient red background"&gt;&lt;/a&gt;&lt;br&gt;
The calmer background of the navigation bar improves the contrast and readability of the white text on it.&lt;/p&gt;

&lt;p&gt;You'll also notice that as well as redoing the font in the rest of the site, I also restyle the Archive of Our Own logo using the 'Impact' font. It draws the eye more to the logo and was just my personal choice.&lt;/p&gt;

&lt;p&gt;Back to the footer! I applied a gradient to this section, as opposed to a solid colour. This is to avoid bland colour usage across the site. I also put in a boxshadow. However, this one I set to be &lt;code&gt;inset&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#footer {
  box-shadow: 0px 5px 30px #282828 inset;
  background: linear-gradient(135deg, #990000 0%,#750000 52%,#4a0000 100%);
} 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This gives the illusion that the footer is underneath the main site. This creates a page-like appearance, paying homage to the classic 'novel' style of the original site. &lt;br&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%2F2j9wig2g86ciay1jd7ff.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%2F2j9wig2g86ciay1jd7ff.PNG" alt="The skinned footer with an inset box shadow and a gradient red background"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lastly, I looked at the search bar and the buttons, which had 3D effects applied to them. The search button specifically had the styles below attached to them.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#header #search .button {
  background: #fff;
  color: #000;
  border-radius: 2px;
  box-shadow: none;
  height: 1.6em;
} 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The contrast and readability was improved by designing a button with black text on white background. The search bar underwent a similar redesign:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#header #search .text {
  background: white;
  box-shadow: none;
  border-radius: 2px;
} 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You'll see as well that I've edited the &lt;code&gt;border-radius&lt;/code&gt; for both. Initially, there were no discernible corners; now there are nice rounded corners, emulating the corners that I implemented on the menu dropdowns. A nice modern approach that is neither a sharp corner nor a totally round end. &lt;/p&gt;

&lt;p&gt;The result is displayed below:&lt;br&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%2Fsjnyz4y6jw9yctw40t4h.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%2Fsjnyz4y6jw9yctw40t4h.PNG" alt="The skinned search button and text input area which have a solid white background and black text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The placeholder beneath the search bar appears when you begin typing in the search bar. This had a dark grey background initially but was amended to match the rest of the site design, with white background and black text.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#site_search_tooltip {
  background: #fff;
  border: 0.75px solid #ccc;
  border-radius: 2px;
} 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;There's plenty of honourable mentions within the CSS that I wrote, but I didn't want this article to go on too long. For instance, there was nothing wrong with the hovering transition on the submit button - however, I did amend this to include a fun, colourful little animation as the background.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#header #search .button:hover {
  color: #fff;
  border: none;
  background-image: url('https://art.pixilart.com/0fe65fb08e889f4.gif');
  background-size: cover;
} 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Without tidying up a little of the HTML and using a framework to handle the site's content generation, there's not much flexibility with the site's layout. Where there is, it would require creating a site with a complete overhaul of the CSS which - as I said - is time-consuming and more effort than I've been willing to put into the project at the current moment. That being said, I feel like there's so much potential with the site.&lt;/p&gt;

&lt;p&gt;I hope that you enjoyed seeing some of the changes I made, and that it inspired you to make a skin of your own! If you'd like to contribute to 'Moderno' or see the latest version of the code, checkout the GitHub repo containing the CSS for the AO3 skin.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/kitella1" rel="noopener noreferrer"&gt;
        kitella1
      &lt;/a&gt; / &lt;a href="https://github.com/kitella1/AO3-Skin-Moderno" rel="noopener noreferrer"&gt;
        AO3-Skin-Moderno
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      The CSS code required for a complete re-skin of Archive of Our Own
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;AO3-Skin-Moderno&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;The CSS code required for a complete re-skin of Archive of Our Own&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Welcome to Moderno!&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;If you're visiting this repository, chances are you've read the 3rd installment of 'Arrested (Web) Development' on Dev.to. If not, welcome anyway!&lt;/p&gt;

&lt;p&gt;The CSS code included in this repository can be pasted into the skin editor of AO3 to give the site a more fresh, modern appearance.&lt;/p&gt;

&lt;p&gt;Feel free to fork the repository and make any improvements or updates. Together we can build a great thing.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How do I make a skin?&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;If you've never created a skin on AO3 before, fear not. It's very simple to do. Simply log in to your AO3 account and find the 'Skins' option from the menu on the right-hand menu of your Dashboard. The URL will look something like the link below:
&lt;a href="https://archiveofourown.org/users/%5ByourUsername%5D/skins" rel="nofollow noopener noreferrer"&gt;https://archiveofourown.org/users/[yourUsername]/skins&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;From within this menu, locate the 'Create Site Skin' button and et voila…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/kitella1/AO3-Skin-Moderno" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Do let me know if you decide to contribute anything; perhaps I'll do a continuation of this post, highlighting some of the gret community contributions that have been made. &lt;/p&gt;

&lt;p&gt;In the meantime, see you in the next part of this series!&lt;/p&gt;

</description>
      <category>html</category>
      <category>css</category>
      <category>vanilla</category>
      <category>web</category>
    </item>
    <item>
      <title>Arrested (Web) Development - Part 2</title>
      <dc:creator>Katie Adams</dc:creator>
      <pubDate>Mon, 14 Oct 2019 12:14:17 +0000</pubDate>
      <link>https://forem.com/katieadamsdev/arrested-web-development-part-2-m6n</link>
      <guid>https://forem.com/katieadamsdev/arrested-web-development-part-2-m6n</guid>
      <description>&lt;h5&gt;
  
  
  Click here for the last part of this series:
&lt;/h5&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/katieadamsdev" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--b6uf0G_Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--6f_zq8HM--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/155244/f50dc992-c59d-4b4d-aa37-22bf14a5571f.jpg" alt="katieadamsdev image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/katieadamsdev/arrested-web-development-38g5" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Arrested (Web) Development - Part 1&lt;/h2&gt;
      &lt;h3&gt;Katie Adams ・ Sep 23 '19 ・ 6 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#web&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#html&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#css&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#vanilla&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;Caffeine. It's the staple of any developer's lifestyle; I can't even count how many loyalty card apps I have on my phone (that's a lie - I can and it's 5).&lt;/p&gt;

&lt;p&gt;Caffe Nero is a personal favourite of mine. Their app makes it easy to order from any of their establishments; simply connect the app to your card, scan the QR code, and the stamp will automatically be applied to a digital loyalty card.&lt;/p&gt;

&lt;p&gt;I'll clarify now: I am not sponsored by Caffe Nero nor is this post.&lt;/p&gt;

&lt;p&gt;Now, when I originally started the ideas for this post, I was using an older version of the mobile app. Since then there's been an update so - curses! - a lot of the improvements were actually made.&lt;/p&gt;

&lt;p&gt;Let's take a look at them.&lt;/p&gt;

&lt;h1&gt;
  
  
  Arrested Web Development: Part 2
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Caffe Nero - Mobile App
&lt;/h2&gt;

&lt;p&gt;On the older version of the app, each section of the app - the loyalty card, the available offers, etc - were split into cards that could be swiped between. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--krG8nW6o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/l52vxltib8ncf02hh8g0.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--krG8nW6o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/l52vxltib8ncf02hh8g0.jpg" alt="A screenshot of the old Caffe Nero app" width="300" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The use of cards as a design was fun. Swiping between them felt natural and was easy to if you were only using the phone with one hand. Even now, in the updated version, all of the controls are along the bottom of the screen which benefits the user in the same way. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3QQY2TFW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/j02lb37xdfovrtmxyl6g.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3QQY2TFW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/j02lb37xdfovrtmxyl6g.jpg" alt="A screenshot of the latest Caffe Nero app" width="300" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another perk is the design of the app. In the previous version, the background was of a coffee shop chalkboard; whilst pleasing and relevant to the app's purpose, it left the visual appearance feeling a little busy. In the new app, it's now a beautiful dark grey slate. It adds a nice level of contrast that improves accessibility and allows for clear differentiation between sections of the app.&lt;/p&gt;

&lt;p&gt;In a similar vein, the font used throughout the app is legible and equally contrasts well against the varying aspects of the app. This supports my final compliment of the app: there is a strong brand throughout. The colour scheme is clear with the signature blue as the primary colour and accented by the gold that's used in any iconography and linked texts.&lt;/p&gt;

&lt;p&gt;So where does it lack?&lt;/p&gt;

&lt;p&gt;None of the concerns I found do not obviously detract from the usability of the app. For instance, something I noticed in the previous versions of the app and in the current one regards with image aspect ratios. &lt;/p&gt;

&lt;p&gt;On the previous version of the app, one of the cards displayed an image anchored to the top.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--krG8nW6o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/l52vxltib8ncf02hh8g0.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--krG8nW6o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/l52vxltib8ncf02hh8g0.jpg" alt="A screenshot of the old Caffe Nero app with a distorted image" width="300" height="600"&gt;&lt;/a&gt;&lt;br&gt;
On phones with larger screens, as is now becoming commonplace, the image becomes distorted. &lt;/p&gt;

&lt;p&gt;The splash screen as the app loads on the new version acts in a similar way.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--72r6A3HE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/4gkdsn3fnlhoskitni0h.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--72r6A3HE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/4gkdsn3fnlhoskitni0h.jpg" alt="The splash screen on the new Caffe Nero app" width="300" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, there are two ways to solve this. On a webpage, it's very easy to keep the aspect ratio of an image the same. On your image tag, specify the size of the image using the &lt;code&gt;height&lt;/code&gt; and &lt;code&gt;width&lt;/code&gt; attributes. Then, using CSS, set the width of the image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; #imgName
{
   width: 100%; 
   height: auto;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This &lt;code&gt;width: 100%&lt;/code&gt; sets the width to match that of its parent, meaning it will stretch to fill if necessary. As a result, if the image is on a screen turned horizontally or is displayed on a wider screen like a tablet, this will be taken into account. Hooray for responsive design! However, you can set this value to whatever you want.&lt;/p&gt;

&lt;p&gt;The important part is &lt;code&gt;height: auto&lt;/code&gt;. This uses the aspect ratio (determined from the &lt;code&gt;height&lt;/code&gt; and &lt;code&gt;width&lt;/code&gt; attributes you defined earlier) to make the image as large as it can be without stretching. Et voila!&lt;/p&gt;

&lt;p&gt;If you're using an image as a background image - see the splash screen for the newer version of the app - then consider using the &lt;code&gt;background-size&lt;/code&gt; property. Using &lt;code&gt;background-size: auto&lt;/code&gt; will allow the aspect ratio to remain the same but your image might disappear off of the side of the screen. Alternatively, you can set it to &lt;code&gt;background-size: contain&lt;/code&gt;; this constrains the image to the width of the parent completely but will leave white space underneath if it isn't tall enough to fulfil it. &lt;/p&gt;

&lt;p&gt;So there you go! Not as much to go on as I'd originally intended. Kudos to the developers behind the app for such a fantastic update. If you ever want to give me free tea, just reach out. ;)&lt;/p&gt;

&lt;p&gt;If you have anything to add to the discussion or any apps/websites you want me to take a look at, just let me know in the discussion section. In the meantime, see you soon!&lt;/p&gt;

</description>
      <category>web</category>
      <category>html</category>
      <category>css</category>
      <category>vanilla</category>
    </item>
    <item>
      <title>Win for the Week: What have you achieved?</title>
      <dc:creator>Katie Adams</dc:creator>
      <pubDate>Sat, 12 Oct 2019 22:52:26 +0000</pubDate>
      <link>https://forem.com/katieadamsdev/win-for-the-week-what-have-you-achieved-52fo</link>
      <guid>https://forem.com/katieadamsdev/win-for-the-week-what-have-you-achieved-52fo</guid>
      <description>&lt;p&gt;This week, I took the first of many Microsoft Office Specialist exams - and thankfully passed! I got a swanky badge with the Microsoft Word logo on it that I promptly fastened to my lanyard, the iconic shade of blue clashing wonderfully with the BB-8 themed neckwear; there was a noticeable skip in my step walking home. That skip translated nicely into some very swish dance moves I performed last night in a celebratory night on the town. &lt;/p&gt;

&lt;p&gt;Next week, I've scheduled to take the Powerpoint MOS exam. :)&lt;/p&gt;

&lt;p&gt;I've also begun working for the first time with Bulma. After fighting a little bit with command-line installation (a technique I'm not especially confident in), I finally managed to set up a template webpage with Bulma and VueJS. I can't wait to get started on that project!&lt;/p&gt;

&lt;p&gt;So I want to know: what's been your win this week? Maybe it was as big as receiving a well-earned promotion or making the career change you'd been delaying for too long? Or perhaps it was something smaller but just as important. Perhaps you finally managed to walk the dog past that one bank of the river and not be dragged into the muddy water (I am absolutely speaking from horribly frigid experience[s]).&lt;/p&gt;

&lt;p&gt;Let's spread the love: give yourselves a pat on the back in the comments below.&lt;/p&gt;

</description>
      <category>casual</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Arrested (Web) Development - Part 1</title>
      <dc:creator>Katie Adams</dc:creator>
      <pubDate>Mon, 23 Sep 2019 14:12:04 +0000</pubDate>
      <link>https://forem.com/katieadamsdev/arrested-web-development-38g5</link>
      <guid>https://forem.com/katieadamsdev/arrested-web-development-38g5</guid>
      <description>&lt;p&gt;Sunshine, seasides, and sandy beaches: that was how I spent my birthday this year. Months of savings took me all the way to Mallorca, where I tried squid for the first time and nursed copious amounts of my new favourite thing: Prosecco Sangria (recipe below). 'Twas absolute bliss.&lt;/p&gt;

&lt;p&gt;As I write this, however, I'm sat in a soggy little city at the heart of the West Midlands. A change of scenery, to put it mildly. It was on the train journey back from Manchester Airport that I concocted the idea for this new series. Those of you following me on Twitter will already know what it entails:&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1167804280553844736-338" src="https://platform.twitter.com/embed/Tweet.html?id=1167804280553844736"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1167804280553844736-338');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1167804280553844736&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;My intentions for this series are simply to be kind and constructive. &lt;strong&gt;This will not become a platform to put-down other developers or their work.&lt;/strong&gt; Rather, I want it to be a way of pointing to real-world examples of code and saying: 'I like this but I'd do it differently - and here's how.'&lt;/p&gt;

&lt;p&gt;With that in mind, the logical first candidate for this series is: myself. &lt;/p&gt;

&lt;p&gt;The fairest way to start this process is to prove that I fully intend to be able to take what I will be 'dishing out', and also to enjoy my most laughable website.&lt;/p&gt;

&lt;p&gt;So sit back, relax, and prepare for some good ol' fashioned cringeworthy web design. Courtesy of Yours Truly.&lt;/p&gt;

&lt;h1&gt;
  
  
  Arrested Web Development: Part 1
&lt;/h1&gt;

&lt;h2&gt;
  
  
  My First Website
&lt;/h2&gt;

&lt;p&gt;The scenario was simple: create a website about yourself. My first ever portfolio, if you will. My most extensive use of HTML 'in the real world' at the time had been tinkering with my Tumblr blog's theme. &lt;/p&gt;

&lt;p&gt;This was the result:&lt;br&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%2Fkien4oxv8je56j4ysjm0.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%2Fkien4oxv8je56j4ysjm0.PNG" alt="The home page of KatieAdamsDev's first website"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, there are many ways I could tear this website apart (and I have in the subsequent years). However, as promised, I will remain kind and constructive, even to my former self, who I must give some slither of credit for cobbling such a thing together without a lick of technical knowledge to her name. &lt;/p&gt;

&lt;p&gt;The first thing I will say is that there are plenty of things going on behind-the-scenes that I'm pleased about. &lt;/p&gt;

&lt;p&gt;All the images have &lt;code&gt;alt&lt;/code&gt; tags with accessible and helpful image descriptions.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;img src="images/2004-square.jpg"  width = "170" height = "170" alt = "a picture of Katie Adams as a young child, wearing aviator glasses and a pearl necklace"&amp;gt;&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Not only do &lt;code&gt;alt&lt;/code&gt; tags keep a website accessible, it can also improve SEO (Search Engine Optimisation). &lt;/p&gt;

&lt;p&gt;&lt;em&gt;For some context, this image was taken during a primary school assembly, in which I played the role of a meteorologist. My mother rose to the challenge of dressing me thusly. At the time, I believe it must've been endearing and adorable for the gathered parents and faculty. Now when I do this, however, I'm 'out of date' and 'no longer need to attend school assemblies'.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Back on topic! All of my images resize based on the screen size of the device upon which it is being viewed. I also have multiple versions of my images in varying quality to accommodate for differing screens. The latter is achieved using the &lt;code&gt;picture&lt;/code&gt; tag, and the &lt;code&gt;source&lt;/code&gt; tag in conjunction with the &lt;code&gt;srcset&lt;/code&gt; attribute.&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;picture&amp;gt;
&amp;lt;source srcset = "images/2004.jpg" media="(min-width: 990px)"&amp;gt;
&amp;lt;source srcset = "images/2004-crop.jpg" media="(min-width: 768px)"&amp;gt;
&amp;lt;img src="images/2004-square.jpg"  width = "170" height = "170" 
alt = "a picture of Katie Adams as a young child, wearing aviator glasses and a pearl necklace"&amp;gt;
&amp;lt;/picture&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each image has also been compressed. This improves the loading time of the webpage on mobile phones and other, smaller devices. &lt;/p&gt;

&lt;h4&gt;
  
  
  Did you know?
&lt;/h4&gt;

&lt;p&gt;The average user will leave your site if it has not loaded &lt;a href="https://www.websitemagazine.com/blog/5-reasons-visitors-leave-your-website" rel="noopener noreferrer"&gt;within 10-20 seconds&lt;/a&gt;. Scarier than this, the first &lt;em&gt;3 seconds&lt;/em&gt; appear to be vital for &lt;a href="https://www.websitemagazine.com/blog/5-reasons-visitors-leave-your-website" rel="noopener noreferrer"&gt;40% of users&lt;/a&gt;, who will leave if site processing is any longer.&lt;/p&gt;

&lt;p&gt;The icons on the site are all SVGs too (yes, including that horrible lightbulb logo). As well as this, the selected option from the navigation bar at the top is clearly highlighted using a box-shadow. Perhaps it is not the most attractive way to highlight it but it cannot be disputed that it's obvious the user is on the 'Home' page.&lt;/p&gt;

&lt;p&gt;As a middle point, I did not include Modernizr in my site (as was recommended by the brief). If I'm being brutally honest, it was because I didn't understand how it worked and ran out of time to learn. The feedback I received, however, did note that I'd achieved a similar effect with Javascript. &lt;/p&gt;

&lt;p&gt;In my HTML documents, I inserted a &lt;code&gt;p&lt;/code&gt; tag noting that JavaScript was turned off. My first line of JavaScript removed this tag from the DOM. Something to consider when it comes to learning new tools/features: you may understand it better than you give yourself credit for.&lt;/p&gt;

&lt;p&gt;Now onto the less pleasing things. Hoo boy, where do I begin?&lt;/p&gt;

&lt;p&gt;The colour scheme could use a lot of work. In theory, it works well - the white text on the dark green background, for instance, is clear and legible - but any good designer will agree that the nuances of balancing accessibility and attractiveness are not so callously implemented.&lt;/p&gt;

&lt;p&gt;Were I to update the site and create something more aesthetically pleasing, the easiest way to do so would be to declare variables in the CSS files. Variables will store any values you give them; in this case, it would be the hex codes for our colour scheme, making any future amendments easy to implement throughout the whole site.&lt;/p&gt;

&lt;p&gt;In a trivial project such as this, variables can be declared at the top of the CSS file so changes cascade down.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;:root {
  --mainColour: #76BC46;
  --accentColour: #C14868;
}

.nav {
  background-color: var(--mainColour);
}

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

&lt;/div&gt;



&lt;p&gt;If you're using other frameworks, however, be sure to find the best method for the project. For example, CSS preprocessors like SASS and SCSS might be worth looking at. I recently utilised SCSS in a VueJS project; it involved creating a variables.scss file and declaring global values inside, like font-family values and hex codes for my colour scheme. When I inevitably wanted to update these at a later date, I was only changing code in one place!&lt;/p&gt;

&lt;p&gt;Advice: remain consistent with your variable names to maintain clean code. No swapping from camel case to hyphenated names halfway through a project! You'll thank yourself later.&lt;/p&gt;

&lt;p&gt;The nav bar at the top of the webpage is sticky too, which means that when the user scrolls down, it remains at the top of the page. There is plenty of debate on how best to achieve this effect. I settled on using &lt;code&gt;position:fixed&lt;/code&gt; on my navigation bar, sectioning off my page content into a &lt;code&gt;div&lt;/code&gt;, and lowering it pushing it beneath my navigation bar changing the &lt;code&gt;margin-top&lt;/code&gt; value.&lt;/p&gt;

&lt;p&gt;It is not the worst way to achieve this effect but there is one that reduces the amount of code rendered.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#navBar
{
  position: sticky;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, it is very easy to use the &lt;code&gt;position:sticky&lt;/code&gt; CSS, as I didn't. However, it is not currently as &lt;a href="https://caniuse.com/#search=position%20sticky" rel="noopener noreferrer"&gt;widely-supported&lt;/a&gt;. At least, not as much as &lt;code&gt;position:fixed&lt;/code&gt;. I will allow people much cleverer than I to debate the best practice here. &lt;/p&gt;

&lt;p&gt;There is a lot more that I could delve into for this article, the writing process for which was made much easier by having the developer herself to talk to (though it did earn me a few strange looks at the library). Future articles will be trimmed into bitesize nuggets of knowledge.&lt;/p&gt;

&lt;p&gt;If you can suggest alternatives to the advice I've given, or wish to contribute to this personal roasting session, leave me some feedback! It can only make me better.&lt;/p&gt;

&lt;p&gt;And lastly, as promised:&lt;/p&gt;

&lt;h3&gt;
  
  
  Prosecco Sangria Ingredients
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Prosecco&lt;/li&gt;
&lt;li&gt;Orange Juice&lt;/li&gt;
&lt;li&gt;Fanta&lt;/li&gt;
&lt;li&gt;Fresh Fruit&lt;/li&gt;
&lt;li&gt;Ice&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Don't ask me for the proportions. I still haven't figured them out and fear I never will.&lt;/p&gt;

</description>
      <category>web</category>
      <category>html</category>
      <category>css</category>
      <category>vanilla</category>
    </item>
    <item>
      <title>Jack Of All Trades or Master of One?</title>
      <dc:creator>Katie Adams</dc:creator>
      <pubDate>Thu, 27 Jun 2019 10:59:18 +0000</pubDate>
      <link>https://forem.com/katieadamsdev/jack-of-all-trades-or-master-of-one-56b2</link>
      <guid>https://forem.com/katieadamsdev/jack-of-all-trades-or-master-of-one-56b2</guid>
      <description>&lt;p&gt;One of these days, I'll write a Dev.to article that isn't just thought dumping onto a page. However, today is not that day!&lt;/p&gt;

&lt;p&gt;I pride myself on being a sponge for knowledge. Recently, however, I've been taking a little break from reading around and trying new languages to give my brain a well-earned pitstop. Picture my brain somewhere warm and sunny, with its sandal-clad feet propped up in a deck chair and a glass of ice-cold lemonade getting it's hand slick with condensation. (Do not question how my brain developed limbs and apparently a working digestive system.)&lt;/p&gt;

&lt;p&gt;Whilst taking a few days to myself, a question appeared in my head that I've been unable to shake: is all of this extra learning doing me any good?&lt;/p&gt;

&lt;p&gt;The more I read about interview practices and techniques, I realise how much I flounder when asked technical questions by people who purport to know a great deal more than me. The thought of going into interviews and being quizzed on my abilities makes me incredibly nervous. &lt;/p&gt;

&lt;p&gt;Now some of this can be put down to imposter syndrome, of course, but I must also accept a degree of responsibility . I'm a lot more confident in my programming abilities than I was two years ago but still know that I might not appear the most proficient when quizzed in a time-sensitive situation.&lt;/p&gt;

&lt;p&gt;I've also never truly known what I've wanted to do. &lt;/p&gt;

&lt;p&gt;For instance, I love video game design and Development - because I love stories and characters and art and music. I want to be part of the process that brought my favourite games before me. &lt;/p&gt;

&lt;p&gt;I also love web development. The feeling I get when I've designed a beautiful and responsive site that is also accessible and functional? I imagine it's how a peacock feels when they've just had their feathers done at the local peacock salon.&lt;/p&gt;

&lt;p&gt;Software engineering gives me great joy too. Mobile apps, web apps, programs - you name it, I want to know how to make it!&lt;/p&gt;

&lt;p&gt;I have something of a childlike wonder for creation, for making things and being able to say 'look, I did this!'&lt;/p&gt;

&lt;p&gt;But where does it end? Where do I stop and realise I have to settle for one?&lt;/p&gt;

&lt;p&gt;How long before my 'breadth of knowledge' begins to be described as a 'lack of advanced expertise'?&lt;/p&gt;

&lt;p&gt;Has anybody ever had the same dilemma? Whether it's about you or a colleague, friend, or family member: I'd love to hear your thoughts. No matter what side of the interview table you were on, how do you handle this type of CV?&lt;/p&gt;

</description>
      <category>career</category>
      <category>discuss</category>
    </item>
    <item>
      <title>How To Balance Personal and Professional Projects</title>
      <dc:creator>Katie Adams</dc:creator>
      <pubDate>Fri, 21 Jun 2019 14:32:38 +0000</pubDate>
      <link>https://forem.com/katieadamsdev/how-to-balance-personal-and-professional-projects-3p1p</link>
      <guid>https://forem.com/katieadamsdev/how-to-balance-personal-and-professional-projects-3p1p</guid>
      <description>&lt;p&gt;We've all heard the phrase 'work-life balance'. It's a topic that lots of incredibly clever people on this site delve into regularly. I've seen lots of excellent commentary and discussion about how best to balance the 9-to-5 with the activities that allow us to wind-down. &lt;/p&gt;

&lt;p&gt;However, what I personally struggle with, is winding down in general. &lt;/p&gt;

&lt;p&gt;As my partner will attest, he once came home late and found me passed out over my keyboard, compiler listing errors that filled the page. (This was approximately 2AM so usage of 'late' in place of 'early' is up for debate.)&lt;/p&gt;

&lt;p&gt;Stereotypical student behaviour, perhaps. However, since then, I've heard reiterated many times how important it is to have side-projects, to practice programming outside of the daily grind. Of course I'm all for personal/professional development but my question is: where does it end? &lt;/p&gt;

&lt;p&gt;One of my favourite things to have learnt during my placement year is that leaving work at the door feels wonderful. Having worked at a boarding school, I've been constantly shocked and amazed at the culture there. Whether it's being available via e-mail 24/7 or being expected to work 6 days a week, regularly, from 7am until 11pm, there was a persistent desire to be contributing your role whenever required. &lt;/p&gt;

&lt;p&gt;Does programming demand the same dedication?&lt;/p&gt;

&lt;p&gt;Is it not the delight of home life to be an escape from work? To come home at the end of the day and be able to do something unrelated to your career for a change?&lt;/p&gt;

&lt;p&gt;For instance, one of my passions is creative writing. I've published several pieces of fiction over the last 2 years, one of which was 200,000 words long (roughly the same length as Moby Dick). Does this not contribute towards my portfolio, albeit differently to pursuing a new coding language? Is it something I should list on my CV or is it - simply put - irrelevant?&lt;/p&gt;

&lt;p&gt;Does it not enhance my portfolio despite not being related specifically to my line of work?&lt;/p&gt;

&lt;p&gt;I've also started working on a Raspberry Pi-based project. Developing software for my local animal shelter is a way I can stay involved with my community and also develop my skills. Yet it's very difficult to come home after a day in front of one screen and convince myself to look at another. Especially when the alternative is picking up my guitar or reading a book or walking my dog. &lt;/p&gt;

&lt;p&gt;So why is there a need to constantly be busy? With the topic of ergonomics and &lt;a href="https://www.bbc.co.uk/news/business-34677949"&gt;bettered work environments&lt;/a&gt; (both inside and outside of work) being a &lt;a href="https://www.independent.co.uk/news/business/news/sweden-six-hour-working-day-too-expensive-scrapped-experiment-cothenburg-pilot-scheme-a7508581.html"&gt;very hot topic&lt;/a&gt;, is it not worth experimenting with other projects? The benefits for not working all hours of the day is surely evident, no? &lt;/p&gt;

&lt;p&gt;Hobbies and passions outside of work are great for relaxing and turning your brain off. You can return to work the next day feeling rested. Calmer. Looking at code with fresh eyes. &lt;/p&gt;

&lt;p&gt;My mother's often said how sitting with a puzzle for an hour before bed helps her unwind; the simple act of sifting through misshapen cardboard and slotting them together leaves her in a better head space for work the next day.&lt;/p&gt;

&lt;p&gt;My sister enjoys adding to her sketchbook outside of work. In fact, she's produced some incredible drawings of comic book characters and local wildlife on account of her dedication to it.&lt;/p&gt;

&lt;p&gt;Even my father, a paramedic, finds time to play his Xbox outside of twelve hour shifts and career development training.&lt;/p&gt;

&lt;p&gt;However, none of them are programmers. Is it simply a burden of the business? Should we not have pursued programming if we didn't want to be doing it all the time? Are we allowed to have interests outside of our technological bubble?&lt;/p&gt;

&lt;p&gt;For the record: personal and professional development, I believe, is absolutely crucial to anybody looking to develop their career. Even now, I'm swapping the HDMI cable on my monitor so I can make some progress with my Raspberry Pi. &lt;/p&gt;

&lt;p&gt;However, equally, as somebody about to enter the workforce, I do worry about the culture being developed that might be off putting to new developers or ultimately lead to exhausted, less-efficient programmers.&lt;/p&gt;

&lt;p&gt;This post has posed more questions than answer, purely because I do not have any. Being a year away from graduating university, I'm not sure I've got enough experience in the world of work to try and suggest solutions - yet.&lt;/p&gt;

&lt;p&gt;However, I've had enough of a taste of employment to know that these are questions I want answered. &lt;/p&gt;

&lt;p&gt;Employers and employees: what do you think? I'd love to know how you work - and how you stop. &lt;/p&gt;

</description>
      <category>discuss</category>
      <category>career</category>
    </item>
    <item>
      <title>SOLVED: Raspberry Pi Permissions</title>
      <dc:creator>Katie Adams</dc:creator>
      <pubDate>Fri, 03 May 2019 10:57:00 +0000</pubDate>
      <link>https://forem.com/katieadamsdev/raspberry-pi-index-html-permissions-4d35</link>
      <guid>https://forem.com/katieadamsdev/raspberry-pi-index-html-permissions-4d35</guid>
      <description>&lt;p&gt;Hello folks!&lt;/p&gt;

&lt;p&gt;I'm looking for some help with a Raspberry Pi project I'm working on. &lt;/p&gt;

&lt;p&gt;It's a Raspberry Pi 3 Model B+ running Raspbian and Apache server. Everything to do with Apache is up and running - as in I can see the generatde index.html file and edit it in Geany with the gksudo command.&lt;/p&gt;

&lt;p&gt;However, my next step is to set up the rest of the web app within the /var/www/html folder. I cannot seem to do this because of permissions. The folder is owned by root and has a group of root. &lt;/p&gt;

&lt;p&gt;I've scoured the web and StackOverflow but can't seem to find any solution that either:&lt;br&gt;
A) is the definitive best practice for security&lt;br&gt;
B) make sense to a Raspbian newbie like me&lt;br&gt;
C) works&lt;/p&gt;

&lt;p&gt;I decided to pose my question here. What is a secure way to grant myself editing rights to the /var/www/html folder that doesn't violate security rules? Any sort of explanation that you could offer with regards to what the command is doing too would be very appreciated. I'd like to know what's going on so I can learn from it. XD&lt;/p&gt;

</description>
      <category>raspberrypi</category>
      <category>apache</category>
      <category>php</category>
    </item>
  </channel>
</rss>
