{
  "version": "https://jsonfeed.org/version/1",
  "title": "goex.dev",
  "home_page_url": "https://ygoex.com",
  "feed_url": "https://ygoex.com/feed/feed.json",
  "description": "Yolanda Gorriz Exposito portfolio. UX/UI Designer &amp; Front-End Web Developer.",
  "author": {
    "name": "Yolanda Gorriz Exposito",
    "url": "https://ygoex.com/about-me/"
  },
  "items": [{
      "id": "https://ygoex.com/work/other_projects_i_had_fun_with/appointments_app/",
      "url": "https://ygoex.com/work/other_projects_i_had_fun_with/appointments_app/",
      "title": "Appointments APP",
      "content_html": "<dl>\n  <dt>\n    Date\n  </dt>\n  <dd>\n    2016\n  </dd>\n  <dt>\n    URL\n  </dt>\n  <dd>\n    <a class=\"break-word\" href=\"https://cdpn.io/ygoex/debug/GrgvdL/PNkvYXeLzOeA\">https://cdpn.io/ygoex/debug/GrgvdL/PNkvYXeLzOeA</a>\n  </dd>\n  <dt>\n    Status\n  </dt>\n  <dd>\n    Live\n  </dd>\n  <dt>\n    Repository\n  </dt>\n  <dd>\n    <a href=\"https://github.com/ygoex/appointments-app\">https://github.com/ygoex/appointments-app</a>\n  </dd>\n  <dt>\n    Role\n  </dt>\n  <dd>\n    UX/UI Designer & Front-End Web Developer\n  </dd>\n  <dt>\n    Technologies\n  </dt>\n  <dd>\n    <ul>\n      <li><a href=\"https://getbootstrap.com/docs/3.3/\">Bootstrap v3.3.7</a> as CSS library,</li>\n      <li><a href=\"https://angularjs.org/\">AngularJS</a> as JS framework,</li>\n      <li><a href=\"https://angular-ui.github.io/bootstrap/\">Angular-ui-bootstrap v2.3.1</a> for datepicker component,</li>\n      <li><a href=\"https://bower.io/\">Bower</a> as package manager,</li>\n      <li><a href=\"https://gruntjs.com/\">Grunt</a> as task runner.</li>\n    </ul>\n  </dd>\n  <dt>\n    Requirements\n  </dt>\n  <dd>\n    <ul>\n      <li>Build a small javascript application that we can use to track appointments, in one HTML page, using a javascript application framework (like angular, backbone, react, etc., not just plain jQuery).</li>\n      <li>Each appointment has a date and a time, along with a title. We want to see a list of all our appointments, ordered by date.</li>\n      <li>Also, there should be a way for us to add a new appointments. What we don't want is any server-side code, so feel free to either use LocalStorage or just have it wiped blank each time I refresh the page, because you should only provide client-side code.</li>\n      <li>What we are looking for is, in order of importance,\n        <ol>\n          <li>Something functional,</li>\n          <li>a good user experience, and</li>\n          <li>something that looks good.</li>\n        </ol>\n      </li>\n      <li>You can use any 3rd party open-source library you want, and any tools/frameworks (like grunt, webpack, etc) to setup your project.</li>\n    </ul>\n  </dd>\n",
      "date_published": "2022-01-09T00:00:00Z"
    },{
      "id": "https://ygoex.com/work/other_projects_i_had_fun_with/yetty/",
      "url": "https://ygoex.com/work/other_projects_i_had_fun_with/yetty/",
      "title": "Yetty",
      "content_html": "<dl>\n  <dt>\n    Date\n  </dt>\n  <dd>\n    2021\n  </dd>\n  <dt>\n    URL\n  </dt>\n  <dd>\n    <a href=\"https://yetty.netlify.app/\">https://yetty.netlify.app/</a>\n  </dd>\n  <dt>\n    Status\n  </dt>\n  <dd>\n    Live\n  </dd>\n  <dt>\n    Repository\n  </dt>\n  <dd>\n    <a href=\"https://github.com/ygoex/yetty\">https://github.com/ygoex/yetty</a>\n  </dd>\n  <dt>\n    Role\n  </dt>\n  <dd>\n    UX/UI Designer & Front-End Web Developer\n  </dd>\n  <dt>\n    Technologies\n  </dt>\n  <dd>\n    <ul>\n      <li><a href=\"https://www.11ty.dev/\">Eleventy</a> as SSG,</li>\n      <li><a href=\"https://mozilla.github.io/nunjucks/\">Nunjucks</a> as template engine,</li>\n      <li><a href=\"https://sass-lang.com/\">SASS</a> as CSS preprocessor,</li>\n      <li><a href=\"https://postcss.org/\">PostCSS</a> (Autoprefixer and PurgeCSS) to transform CSS with JS plugins,</li>\n      <li><a href=\"https://docs.npmjs.com/cli/v8/using-npm/scripts\">Npm scripts</a> for workflow automation.</li>\n    </ul>\n  </dd>\n  <dt>\n    Context\n  </dt>\n  <dd>\n    <p>Yetty is an Eleventy starter kit built with accessibility and performance in mind.</p>\n    <p>A few side projects required a starter kit with the requirements described below, and this is what I came up with. This is the starter kit I have used to build this portfolio.</p>\n  <figure class=\"grid-column-center\" style=\"--banner-border-color:  \"><picture>\n    <source type=\"image/avif\" srcset=\"/assets/images/yetty_post-480.avif 480w, /assets/images/yetty_post-960.avif 960w, /assets/images/yetty_post-1440.avif 1440w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/webp\" srcset=\"/assets/images/yetty_post-480.webp 480w, /assets/images/yetty_post-960.webp 960w, /assets/images/yetty_post-1440.webp 1440w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/jpeg\" srcset=\"/assets/images/yetty_post-480.jpeg 480w, /assets/images/yetty_post-960.jpeg 960w, /assets/images/yetty_post-1440.jpeg 1440w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n    <img\n      class=\"img-post\"\n      src=\"/assets/images/yetty_post-480.jpeg\"\n      width=\"480\"\n      height=\"747\"\n      alt=\"Screenshot of Yetty blog post.\"\n      loading=\"lazy\"\n      decoding=\"async\">\n    <figcaption>Yetty blog post.</figcaption>\n  </picture></figure>\n  </dd>\n  <dt>\n    Requirements\n  </dt>\n  <dd>\n    <ul>\n      <li>Critical CSS to remove render blocking stylesheets.</li>\n      <li>Persistent dark mode</li>\n      <li>HTML minified</li>\n      <li>PWA</li>\n      <li>JS compilation and minification</li>\n      <li>Automate the generation of images in multiple sizes, in two different formats (jpg and webp), and markup with <code>&lt;figure&gt;</code>, <code>&lt;picture&gt;</code> and native lazy loading.</li>\n    </ul>\n  <figure class=\"grid-column-center\" style=\"--banner-border-color:  \"><picture>\n    <source type=\"image/avif\" srcset=\"/assets/images/yetty_blog-480.avif 480w, /assets/images/yetty_blog-960.avif 960w, /assets/images/yetty_blog-1440.avif 1440w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/webp\" srcset=\"/assets/images/yetty_blog-480.webp 480w, /assets/images/yetty_blog-960.webp 960w, /assets/images/yetty_blog-1440.webp 1440w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/jpeg\" srcset=\"/assets/images/yetty_blog-480.jpeg 480w, /assets/images/yetty_blog-960.jpeg 960w, /assets/images/yetty_blog-1440.jpeg 1440w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n    <img\n      class=\"img-post\"\n      src=\"/assets/images/yetty_blog-480.jpeg\"\n      width=\"480\"\n      height=\"664\"\n      alt=\"Screenshot of Yetty blog page.\"\n      loading=\"lazy\"\n      decoding=\"async\">\n    <figcaption>Yetty blog page.</figcaption>\n  </picture></figure>\n  </dd>\n",
      "date_published": "2021-09-23T00:00:00Z"
    },{
      "id": "https://ygoex.com/work/university_of_edinburgh/student_support_office_contact_app/",
      "url": "https://ygoex.com/work/university_of_edinburgh/student_support_office_contact_app/",
      "title": "Student Support Office Contact App",
      "content_html": "<dl>\n  <dt>\n    Date\n  </dt>\n  <dd>\n    November 2019\n  </dd>\n  <dt>\n    URL\n  </dt>\n  <dd>\n    The app can only be accessed from the iPads placed in the waiting area by\nreception and meeting room, both in CMB.\n  </dd>\n  <dt>\n    Status\n  </dt>\n  <dd>\n    Live\n  </dd>\n  <dt>\n    Role\n  </dt>\n  <dd>\n    UI Designer & Solutions Developer\n  </dd>\n  <dt>\n    Technologies\n  </dt>\n  <dd>\n    <ul>\n    <li><a href=\"https://powerapps.microsoft.com/en-us/\">Microsoft PowerApps</a> for UI development,</li>\n    <li><a href=\"https://powerautomate.microsoft.com/en-us/\">Microsoft PowerAutomate</a> for app logic,</li>\n    <li><a href=\"https://www.microsoft.com/en-gb/microsoft-365/sharepoint/collaboration\">Microsoft SharePoint</a> to store officers details and status,</li>\n    <li><a href=\"https://www.microsoft.com/en-gb/microsoft-teams/group-chat-software\">Microsoft Teams</a> for communication between students and offices.</li>\n    </ul>\n  </dd>\n  <dt>\n    Context\n  </dt>\n  <dd>\n    This app was built with vulnerable students in mind. The aim of this app is to provide distressed students inmediate 1-to-1 support.\n  </dd>\n  <dt>\n    Requirements\n  </dt>\n  <dd>\n    <blockquote>\n    The app is going to be run from three Ipads located in the CMB Reception Waiting Area, 1st floor meeting room and one yet to be determined. The iPads must be always locked to this app.\n    </blockquote>\n    <blockquote>\n    Students will be faced with an iPad that has nothing but the 8 faces of the student support team staff on it. The student will only have to tap on one of those faces (the person they are there to meet) and a message (either through skype foe business or Teams) will ping on the Staff member’s desk alerting them that the student is there awaiting them. This way the staff member can collect them from the front door and keep things discreet for the student. The teams alert on the staff member’s desktop also needs to be prominent so when they are alerted it needs to be able to appear on their screen above all other windows so they cannot ignore it or fail to notice it. The student cannot be kept waiting.\n    </blockquote>\n    <blockquote>\n    The app will send the notification to a single person, and not to a group or channel, communicating that a student is waiting to see them and where they are waiting. This person should be able to communicate the student that they have received their notification, and how long it will take to collect them from their location. In terms of design, the UI should show 6 or 8 disks representing members of the SSO team, with their name and photo. It should also display the status of the support team staff using Teams status or Outlook. If officers are not available, their face should be greyed out.\n    </blockquote>\n    <video controls=\"controls\" autoplay=\"\" loop=\"\" muted=\"true\" playsinline=\"\" id=\"hero-video\">\n      <!-- WebM -->\n      <source src=\"/assets/videos/ssocontact.webm\" type=\"video/webm\" />\n      <!-- MPEG-4 -->\n      <source src=\"/assets/videos/ssocontact.mp4\" type=\"video/mp4\" />\n      <!-- Ogv -->\n      <source src=\"/assets/videos/ssocontact.ogv\" type=\"video/ogv\" />\n    </video>\n    <figure class=\"grid-column-center\" style=\"--banner-border-color:  \"><picture>\n    <source type=\"image/avif\" srcset=\"/assets/images/ssocontact_unsuccessful_1-480.avif 480w, /assets/images/ssocontact_unsuccessful_1-960.avif 960w, /assets/images/ssocontact_unsuccessful_1-1440.avif 1440w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/webp\" srcset=\"/assets/images/ssocontact_unsuccessful_1-480.webp 480w, /assets/images/ssocontact_unsuccessful_1-960.webp 960w, /assets/images/ssocontact_unsuccessful_1-1440.webp 1440w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/jpeg\" srcset=\"/assets/images/ssocontact_unsuccessful_1-480.jpeg 480w, /assets/images/ssocontact_unsuccessful_1-960.jpeg 960w, /assets/images/ssocontact_unsuccessful_1-1440.jpeg 1440w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n    <img\n      class=\"img-post\"\n      src=\"/assets/images/ssocontact_unsuccessful_1-480.jpeg\"\n      width=\"480\"\n      height=\"359\"\n      alt=\"Screen displayed when the Student Support Officer requested does not respond\"\n      loading=\"lazy\"\n      decoding=\"async\">\n    <figcaption>Screen displayed when the Student Support Officer requested does not respond.</figcaption>\n  </picture></figure>\n    <figure class=\"grid-column-center\" style=\"--banner-border-color:  \"><picture>\n    <source type=\"image/avif\" srcset=\"/assets/images/ssocontact_unsuccessful_2-480.avif 480w, /assets/images/ssocontact_unsuccessful_2-960.avif 960w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/webp\" srcset=\"/assets/images/ssocontact_unsuccessful_2-480.webp 480w, /assets/images/ssocontact_unsuccessful_2-960.webp 960w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/jpeg\" srcset=\"/assets/images/ssocontact_unsuccessful_2-480.jpeg 480w, /assets/images/ssocontact_unsuccessful_2-960.jpeg 960w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n    <img\n      class=\"img-post\"\n      src=\"/assets/images/ssocontact_unsuccessful_2-480.jpeg\"\n      width=\"480\"\n      height=\"359\"\n      alt=\"Screen displayed when nobody responds.\"\n      loading=\"lazy\"\n      decoding=\"async\">\n    <figcaption>Screen displayed when nobody responds.</figcaption>\n  </picture></figure>\n    The communication between SSO Staff and the students will be done using Microsoft Teams. When a student requests to meet one of the officers, the officer receives the following card in their feed.\n    <figure class=\"grid-column-center\" style=\"--banner-border-color:  \"><picture>\n    <source type=\"image/avif\" srcset=\"/assets/images/ssocontact_card-480.avif 480w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/webp\" srcset=\"/assets/images/ssocontact_card-480.webp 480w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/jpeg\" srcset=\"/assets/images/ssocontact_card-480.jpeg 480w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n    <img\n      class=\"img-post\"\n      src=\"/assets/images/ssocontact_card-480.jpeg\"\n      width=\"480\"\n      height=\"445\"\n      alt=\"Card received by staff via MS Teams when student contacts them.\"\n      loading=\"lazy\"\n      decoding=\"async\">\n    <figcaption>Card received by staff via MS Teams when student contacts them.</figcaption>\n  </picture></figure>\n    When officers receive one of this cards, they can answer the student in three different ways:\n    <ol>\n      <li>Leaving the input field empty and pressing the button Reply to student. This option will send the following standard response to the student (2 minutes).</li>\n      <li>Typing a number into the field provided and pressing the button Reply to student. If the time is going to take to meet the student is shorter or longer, they can type in the field provided an alternative number.</li>\n      <li>Typing a short text message to the student and pressing the button Reply to student. This option sends a short text message to the student.</li>\n    </ol>\n    <figure class=\"grid-column-center\" style=\"--banner-border-color:  \"><picture>\n    <source type=\"image/avif\" srcset=\"/assets/images/ssocontact_text-480.avif 480w, /assets/images/ssocontact_text-960.avif 960w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/webp\" srcset=\"/assets/images/ssocontact_text-480.webp 480w, /assets/images/ssocontact_text-960.webp 960w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/jpeg\" srcset=\"/assets/images/ssocontact_text-480.jpeg 480w, /assets/images/ssocontact_text-960.jpeg 960w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n    <img\n      class=\"img-post\"\n      src=\"/assets/images/ssocontact_text-480.jpeg\"\n      width=\"480\"\n      height=\"359\"\n      alt=\"Screen received by student with text message.\"\n      loading=\"lazy\"\n      decoding=\"async\">\n    <figcaption>Screen received by student with text message.</figcaption>\n  </picture></figure>\n  </dd>\n  <dt>\n    Responsibilities\n  </dt>\n  <dd>\n    <ul>\n      <li>\n        Design UI following requirements from business sponsor.\n      </li>\n      <li>\n        Build UI using Microsoft PowerApps.\n      </li>\n      <li>\n        Create master SharePoint list to be manipulated by Student Support Officers.\n      </li>\n      <li>\n        Create app logic and connect with different technologies using PowerAutomate.\n      </li>\n      <li>\n        Create usage report to keep track of date, time, iPad location, SSO requested, response sent by SSO, etc.\n      </li>\n      <li>\n        Create error log to keep track of number of errors thrown per number of total contact calls made by students.\n      </li>\n      <li>\n        Write technical documentation, user guide and known errors documentation.\n      </li>\n    </ul>\n  </dd>\n</dl>\n",
      "date_published": "2020-11-27T00:00:00Z"
    },{
      "id": "https://ygoex.com/work/university_of_edinburgh/school_of_social_and_political_science_website/",
      "url": "https://ygoex.com/work/university_of_edinburgh/school_of_social_and_political_science_website/",
      "title": "School of Social and Political Science Website",
      "content_html": "<dl>\n  <dt>\n    Date\n  </dt>\n  <dd>\n    January 2020 - November 2020\n  </dd>\n  <dt>\n    URL\n  </dt>\n  <dd>\n    <a href=\"https://www.sps.ed.ac.uk/\">https://www.sps.ed.ac.uk/</a>\n  </dd>\n  <dt>\n    Status\n  </dt>\n  <dd>\n    Live\n  </dd>\n  <dt>\n    Role\n  </dt>\n  <dd>\n    UI Designer & Solutions Developer\n  </dd>\n  <dt>\n    Technologies\n  </dt>\n  <dd>\n    <ul>\n      <li><a href=\"https://www.drupal.org/about/9\">Drupal 9</a> as back-end engine,</li>\n      <li><a href=\"https://www.ansible.com/\">Ansible</a> for deployment automation,</li>\n      <li><a href=\"https://twig.symfony.com/\">Twig</a> as template engine,</li>\n      <li><a href=\"https://patternlab.io/\">Pattern Lab</a> for design system,</li>\n      <li><a href=\"https://getbootstrap.com/\">Bootstrap 4</a> as CSS library,</li>\n      <li><a href=\"https://sass-lang.com/\">SASS</a> as CSS preprocessor,</li>\n      <li><a href=\"https://docs.npmjs.com/cli/v8/using-npm/scripts\">Npm scripts</a> for workflow automation.</li>\n    </ul>\n  </dd>\n  <dt>\n    Context\n  </dt>\n  <dd>\n    The previous SPS website became over the years a dated website from a look and feel perspective. It was also obsolete from a technical point of view since it was built with a non-standard CMS that was about to lost support and security updates.\n    </br>\n    It ended up being not fit for purpose because its content was not easy to be accessed by the university’s ecosystem and vast audience (prospective students and families, current students, staff, etc). All of these users were clearly struggling trying to find relevant information that ended up unreachable because of a lack of information architecture.\n    <figure class=\"grid-column-center\" style=\"--banner-border-color:  \"><picture>\n    <source type=\"image/avif\" srcset=\"/assets/images/old_sps_website-480.avif 480w, /assets/images/old_sps_website-960.avif 960w, /assets/images/old_sps_website-1440.avif 1440w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/webp\" srcset=\"/assets/images/old_sps_website-480.webp 480w, /assets/images/old_sps_website-960.webp 960w, /assets/images/old_sps_website-1440.webp 1440w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/jpeg\" srcset=\"/assets/images/old_sps_website-480.jpeg 480w, /assets/images/old_sps_website-960.jpeg 960w, /assets/images/old_sps_website-1440.jpeg 1440w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n    <img\n      class=\"img-post\"\n      src=\"/assets/images/old_sps_website-480.jpeg\"\n      width=\"480\"\n      height=\"647\"\n      alt=\"The old SPS website.\"\n      loading=\"lazy\"\n      decoding=\"async\">\n    <figcaption>The old SPS website.</figcaption>\n  </picture></figure>\n    <figure class=\"grid-column-center\" style=\"--banner-border-color:  \"><picture>\n    <source type=\"image/avif\" srcset=\"/assets/images/new_sps_website-480.avif 480w, /assets/images/new_sps_website-960.avif 960w, /assets/images/new_sps_website-1440.avif 1440w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/webp\" srcset=\"/assets/images/new_sps_website-480.webp 480w, /assets/images/new_sps_website-960.webp 960w, /assets/images/new_sps_website-1440.webp 1440w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/jpeg\" srcset=\"/assets/images/new_sps_website-480.jpeg 480w, /assets/images/new_sps_website-960.jpeg 960w, /assets/images/new_sps_website-1440.jpeg 1440w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n    <img\n      class=\"img-post\"\n      src=\"/assets/images/new_sps_website-480.jpeg\"\n      width=\"480\"\n      height=\"1071\"\n      alt=\"The new SPS website.\"\n      loading=\"lazy\"\n      decoding=\"async\">\n    <figcaption>The new SPS website.</figcaption>\n  </picture></figure>\n  </dd>\n  <dt>\n    Requirements\n  </dt>\n  <dd>\n    <ul>\n      <li>\n        The overall aim of the new website is to provide a platform to engage different target audiences around two main areas – student recruitment and research activities, allowing them to find what they need, where they expect to find it.\n      </li>\n      <li>\n        A scalable platform that allows to centrally manage and control the brand while giving content independence to each department.\n      </li>\n      <li>\n        A platform that allows a large volume of users who may need to edit content on the website at the same time. \n      </li>\n      <li>\n        A platform for non-technical users, including a WYSIWYG for code-free content editing, media libraries, drag & drop, and roll back to previous version.\n      </li>\n      <li>\n        A platform that offers publishing processes and governance workflows to ensure content accessibility, accuracy, and consistency.\n      </li>\n      <li>\n        A platform that allows owners and content editors flexibility and creativity building pages whilst keeping consistency by using UI components inline with their brand and style guide instead of rigid templates.\n      </li>\n    </ul>\n    <figure class=\"grid-column-center\" style=\"--banner-border-color:  \"><picture>\n    <source type=\"image/avif\" srcset=\"/assets/images/sps_edit-480.avif 480w, /assets/images/sps_edit-960.avif 960w, /assets/images/sps_edit-1440.avif 1440w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/webp\" srcset=\"/assets/images/sps_edit-480.webp 480w, /assets/images/sps_edit-960.webp 960w, /assets/images/sps_edit-1440.webp 1440w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/jpeg\" srcset=\"/assets/images/sps_edit-480.jpeg 480w, /assets/images/sps_edit-960.jpeg 960w, /assets/images/sps_edit-1440.jpeg 1440w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n    <img\n      class=\"img-post\"\n      src=\"/assets/images/sps_edit-480.jpeg\"\n      width=\"480\"\n      height=\"617\"\n      alt=\"The SPS landing page on edit mode.\"\n      loading=\"lazy\"\n      decoding=\"async\">\n    <figcaption>The SPS landing page on edit mode.</figcaption>\n  </picture></figure>\n  </dd>\n  <dt>\n    Responsibilities\n  </dt>\n  <dd>\n    <ul>\n      <li>\n        I implemented a continuous delivery process with Ansible pipelines that enables controlled, quick and efficient deployment of new features every week.\n      </li>\n      <li>\n        I built the front-end architecture based on Twig template engine, Pattern Lab, SASS and npm scripts.\n      </li>\n      <li>\n        I built content types and matching templates based on Communications & Engadgement Team requirements: news, events, subject area, staff profile. I also built individual components (carousel, featured list, Jumbotron, cards, tabs and accordion) used to build the main landing page by the Communications & Engagement Team, and to enhance the rest of the templates where appropiate.\n      </li>\n      <li>\n        I adapted the look and feel of <a href=\"https://www.law.ed.ac.uk/\">Edinburgh Law School website</a> to our own needs.\n      </li>\n    </ul>\n  </dd>\n</dl>\n",
      "date_published": "2019-11-08T00:00:00Z"
    },{
      "id": "https://ygoex.com/work/port80_connected_technology/secure_dock/",
      "url": "https://ygoex.com/work/port80_connected_technology/secure_dock/",
      "title": "Secure Dock",
      "content_html": "<dl>\n  <dt>\n    Date\n  </dt>\n  <dd>\n    June 2016 - July 2016\n  </dd>\n  <dt>\n    Status\n  </dt>\n  <dd>\n    Decommissioned\n  </dd>\n  <dt>\n    Role\n  </dt>\n  <dd>\n    UX/UI Designer & Front-End Web Developer\n  </dd>\n  <dt>\n    Technologies\n  </dt>\n  <dd>\n    <ul>\n      <li><a href=\"https://www.javatpoint.com/what-is-jsf\">Java Server Faces</a> as UI framework,</li>\n      <li><a href=\"https://docs.oracle.com/javaee/6/tutorial/doc/gijtu.html\">Facelets</a> as template engine,</li>\n      <li><a href=\"https://sass-lang.com/\">SASS</a> as CSS preprocessor.</li>\n    </ul>\n  </dd>\n  <dt>\n    Context\n  </dt>\n  <dd>\n    Port80 Secure Dock was a product focused to Port80 Connected Technology customers and their employees, and also to users of Hubtill. Unlike many systems that only encrypt files in transit across the internet, Secure Dock encrypted locally at upload time using a private encryption key and files were never stored in an unencrypted form.\n  </dd>\n  <dt>\n    Requirements\n  </dt>\n  <dd>\n    <ul>\n      <li>Provide a web-app that allowed users (senders and receivers) to upload and download arbitrary files in a secure manner.</li>\n      <li>It also had to provide users with the ability to monitor whether files had been downloaded, how many times, etc.</li>\n      <li>For the initial version of this system there were three types of users to consider, each with different use cases:\n        <ul>\n          <li>The ‘sender’ – who should be allowed to upload a file to the website that had to be available to any of the registered ‘receivers’. The sender could be any member of the public that had been sent an ‘upload’ password by a ‘receiver’.</li>\n          <li>The ‘receiver’ – who had to be pre-registered with the system to be able to receive notifications about files to download, and be able to download files.</li>\n          <figure class=\"grid-column-center\" style=\"--banner-border-color:  \"><picture>\n    <source type=\"image/avif\" srcset=\"/assets/images/sd_urls-480.avif 480w, /assets/images/sd_urls-960.avif 960w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/webp\" srcset=\"/assets/images/sd_urls-480.webp 480w, /assets/images/sd_urls-960.webp 960w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/jpeg\" srcset=\"/assets/images/sd_urls-480.jpeg 480w, /assets/images/sd_urls-960.jpeg 960w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n    <img\n      class=\"img-post\"\n      src=\"/assets/images/sd_urls-480.jpeg\"\n      width=\"480\"\n      height=\"244\"\n      alt=\"Desktop URLs page.\"\n      loading=\"lazy\"\n      decoding=\"async\">\n    <figcaption>Desktop URLs page.</figcaption>\n  </picture></figure>\n          <figure class=\"grid-column-center\" style=\"--banner-border-color:  \"><picture>\n    <source type=\"image/avif\" srcset=\"/assets/images/sd_files-480.avif 480w, /assets/images/sd_files-960.avif 960w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/webp\" srcset=\"/assets/images/sd_files-480.webp 480w, /assets/images/sd_files-960.webp 960w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/jpeg\" srcset=\"/assets/images/sd_files-480.jpeg 480w, /assets/images/sd_files-960.jpeg 960w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n    <img\n      class=\"img-post\"\n      src=\"/assets/images/sd_files-480.jpeg\"\n      width=\"480\"\n      height=\"243\"\n      alt=\"Desktop files page with delete confirmation dialog expanded.\"\n      loading=\"lazy\"\n      decoding=\"async\">\n    <figcaption>Desktop files page with delete confirmation dialog expanded.</figcaption>\n  </picture></figure>\n          <li>An ‘administrator’ – who was the only user type with access to a basic admin reporting and admin function page.</li>\n        </ul>\n      </li>\n    </ul>\n  </dd>\n  <dt>\n    Responsibilities\n  </dt>\n  <dd>\n    <ul>\n      <li>I was responsible for all aspects of UX/UI design, and frontend architecture and development.</li>\n      <li>I designed and developed a UI quick and easy to familiarize with.</li>\n      <li>I designed and developed a clean interface with minimal distractions, displaying only relevant information and organising it in a clear disposition.</li>\n      <li>I designed and developed a pleasant onboarding experience through a quick guide presented on the empty state version of the app.</li>\n    </ul>\n    <figure class=\"grid-column-center\" style=\"--banner-border-color:  \"><picture>\n    <source type=\"image/avif\" srcset=\"/assets/images/sd_no_urls-480.avif 480w, /assets/images/sd_no_urls-960.avif 960w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/webp\" srcset=\"/assets/images/sd_no_urls-480.webp 480w, /assets/images/sd_no_urls-960.webp 960w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/jpeg\" srcset=\"/assets/images/sd_no_urls-480.jpeg 480w, /assets/images/sd_no_urls-960.jpeg 960w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n    <img\n      class=\"img-post\"\n      src=\"/assets/images/sd_no_urls-480.jpeg\"\n      width=\"480\"\n      height=\"242\"\n      alt=\"Desktop URLs page: empty state.\"\n      loading=\"lazy\"\n      decoding=\"async\">\n    <figcaption>Desktop URLs page: empty state.</figcaption>\n  </picture></figure>\n    <figure class=\"grid-column-center\" style=\"--banner-border-color:  \"><picture>\n    <source type=\"image/avif\" srcset=\"/assets/images/sd_no_files-480.avif 480w, /assets/images/sd_no_files-960.avif 960w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/webp\" srcset=\"/assets/images/sd_no_files-480.webp 480w, /assets/images/sd_no_files-960.webp 960w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/jpeg\" srcset=\"/assets/images/sd_no_files-480.jpeg 480w, /assets/images/sd_no_files-960.jpeg 960w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n    <img\n      class=\"img-post\"\n      src=\"/assets/images/sd_no_files-480.jpeg\"\n      width=\"480\"\n      height=\"242\"\n      alt=\"Desktop files page: empty state.\"\n      loading=\"lazy\"\n      decoding=\"async\">\n    <figcaption>Desktop files page: empty state.</figcaption>\n  </picture></figure>\n  </dd>\n",
      "date_published": "2016-07-05T00:00:00Z"
    },{
      "id": "https://ygoex.com/work/port80_connected_technology/palmer_and_harvey_e-commerce_platform/",
      "url": "https://ygoex.com/work/port80_connected_technology/palmer_and_harvey_e-commerce_platform/",
      "title": "Palmer &amp; Harvey e-commerce platform",
      "content_html": "<dl>\n  <dt>\n    Date\n  </dt>\n  <dd>\n    January 2016 - May 2016\n  </dd>\n  <dt>\n    Status\n  </dt>\n  <dd>\n    Decommissioned\n  </dd>\n  <dt>\n    Role\n  </dt>\n  <dd>\n    UX/UI Designer & Front-End Web Developer\n  </dd>\n  <dt>\n    Technologies\n  </dt>\n  <dd>\n    HTML, CSS (SCSS), Grunt & Javascript\n  </dd>\n  <dt>\n    Context\n  </dt>\n  <dd>\n    Palmer and Harvey was a UK-based wholesaler that serviced the retail chain and convenience stores. The company was originally founded in 1925 as a traditional confectionery and tobacco wholesaler, and, after being one of the UK’s largest wholesalers, it collapsed in November 2017 (find out more <a href=\"https://www.theguardian.com/business/2018/jan/23/palmer-harvey-collapsed-with-debts-of-more-than-700m-administrators-report\">here</a>).\n  </dd>\n  <dt>\n    Requirements\n  </dt>\n  <dd>\n    <ul>\n      <li>Merge Palmer and Harvey's dated (6 years old) online ordering desktop-only website, an independent mobile-only ordering website, and another ordering IOS app into a single responsive web platform that should follow the style of the main company website (<a href=\"https://web.archive.org/web/20160306095801/http://www.palmerharvey.co.uk/\">Palmer and Harvey Website</a>).</li>\n      <figure class=\"grid-column-center\" style=\"--banner-border-color:  \"><picture>\n    <source type=\"image/avif\" srcset=\"/assets/images/ph_old_platform-480.avif 480w, /assets/images/ph_old_platform-960.avif 960w, /assets/images/ph_old_platform-1440.avif 1440w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/webp\" srcset=\"/assets/images/ph_old_platform-480.webp 480w, /assets/images/ph_old_platform-960.webp 960w, /assets/images/ph_old_platform-1440.webp 1440w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/jpeg\" srcset=\"/assets/images/ph_old_platform-480.jpeg 480w, /assets/images/ph_old_platform-960.jpeg 960w, /assets/images/ph_old_platform-1440.jpeg 1440w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n    <img\n      class=\"img-post\"\n      src=\"/assets/images/ph_old_platform-480.jpeg\"\n      width=\"480\"\n      height=\"356\"\n      alt=\"Screenshot of P&H old platform.\"\n      loading=\"lazy\"\n      decoding=\"async\">\n    <figcaption>Screenshot of P&H old platform.</figcaption>\n  </picture></figure>\n      <li>Improve the main navigation and search.</li>\n      <li>Display ads in an unintrusive way.</li>\n      <figure class=\"grid-column-center\" style=\"--banner-border-color:  \"><picture>\n    <source type=\"image/avif\" srcset=\"/assets/images/ph_navigation-480.avif 480w, /assets/images/ph_navigation-960.avif 960w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/webp\" srcset=\"/assets/images/ph_navigation-480.webp 480w, /assets/images/ph_navigation-960.webp 960w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/jpeg\" srcset=\"/assets/images/ph_navigation-480.jpeg 480w, /assets/images/ph_navigation-960.jpeg 960w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n    <img\n      class=\"img-post\"\n      src=\"/assets/images/ph_navigation-480.jpeg\"\n      width=\"480\"\n      height=\"328\"\n      alt=\"Palmer & Harvey main and secondary navigation on desktop view.\"\n      loading=\"lazy\"\n      decoding=\"async\">\n    <figcaption>Palmer & Harvey main and secondary navigation on desktop view.</figcaption>\n  </picture></figure>\n      <li>Design and develop a responsive marketing email template that would be later personalised with links to products and ads tailored for each individual customer.</li>\n    </ul>\n  </dd>\n  <dt>\n    Challenges\n  </dt>\n  <dd>\n      At the time (July 2015), no other big groceries except Asda and Aldi had taken the responsive path. All of them had separate ordering systems for desktops and for mobile devices. As I had not many benchmarcks I found myself starting almost in the unknown.\n  </dd>\n  <dt>\n    Responsibilities\n  </dt>\n  <dd>\n    <ul>\n      <li>I re-designed, prototyped and built the new Palmer and Harvey ordering platform paying special attention to main different navigation alternatives, presenting a large search box right under the logo, presenting the products and their information in a more appealing way, and adding more blank space to leave behind the previous cluttered design.</li>\n      <li>I designed and developed a new marketing email template.</li>\n    </ul>\n    <figure class=\"grid-column-center\" style=\"--banner-border-color:  \"><picture>\n    <source type=\"image/avif\" srcset=\"/assets/images/ph_email-480.avif 480w, /assets/images/ph_email-960.avif 960w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/webp\" srcset=\"/assets/images/ph_email-480.webp 480w, /assets/images/ph_email-960.webp 960w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n  <source type=\"image/jpeg\" srcset=\"/assets/images/ph_email-480.jpeg 480w, /assets/images/ph_email-960.jpeg 960w\" sizes=\"(min-width: 30em) 50vw, 100vw\">\n    <img\n      class=\"img-post\"\n      src=\"/assets/images/ph_email-480.jpeg\"\n      width=\"480\"\n      height=\"1388\"\n      alt=\"Screenshot of marketing email.\"\n      loading=\"lazy\"\n      decoding=\"async\">\n    <figcaption>Screenshot of marketing email.</figcaption>\n  </picture></figure>\n  </dd>\n",
      "date_published": "2016-03-10T00:00:00Z"
    },{
      "id": "https://ygoex.com/work/port80_connected_technology/hubtill/",
      "url": "https://ygoex.com/work/port80_connected_technology/hubtill/",
      "title": "Hubtill",
      "content_html": "<dl>\n  <dt>\n    Date\n  </dt>\n  <dd>\n    2015\n  </dd>\n  <dt>\n    Status\n  </dt>\n  <dd>\n    Decommissioned\n  </dd>\n  <dt>\n    Role\n  </dt>\n  <dd>\n    UX/UI Designer & Front-End Web Developer\n  </dd>\n  <dt>\n    Technologies\n  </dt>\n  <dd>\n    <ul>\n      <li><a href=\"https://sass-lang.com/\">SASS</a> as CSS preprocessor,</li>\n      <li><a href=\"https://getbootstrap.com/docs/3.4/\"> Bootstrap 3</a> as CSS library,</li>\n      <li><a href=\"https://angularjs.org/\">AngularJS</a> as JS framework,</li>\n      <li><a href=\"https://bower.io/\">Bower</a> as package manager,</li>\n      <li><a href=\"https://gruntjs.com/\">Grunt</a> as task runner.</li>\n    </ul>\n  </dd>\n  <dt>\n    Context\n  </dt>\n  <dd>\n    <p>Hubtill was a suit of microservices designed for the business-to-business wholesale market. It's aim was to increase efficiency in-store and throughout the supply chain, improve on-shelf availability and stock management.</p>\n    <p class=\"h5\">Hubtill Search</p>\n    <p>Hubtill Search used Artiﬁcial Intelligence (AI) and machine-learning (ML) to develop an understanding of individual customers buying behaviour. By learning who was going to be buying which products and when, suppliers and retailers the algorithm was able to predict the demand much more accurately.</p>\n    <p>The API was designed to be integrated as a third-party plugin in wholesalers and retailers e-commerce websites, and to serve detailed product information adquired from Brandbank, a company which specialises in managing and distributing FMCG (Fast-moving consumer goods) brand content.</p>\n    <video controls=\"controls\" autoplay=\"\" loop=\"\" muted=\"true\" playsinline=\"\">\n      <!-- WebM -->\n      <source src=\"/assets/videos/hubtill_search.webm\" type=\"video/webm\" />\n      <!-- MPEG-4 -->\n      <source src=\"/assets/videos/hubtill_search.mp4\" type=\"video/mp4\" />\n      <!-- Ogv -->\n      <source src=\"/assets/videos/hubtill_search.ogv\" type=\"video/ogv\" />\n    </video>\n    <p class=\"h5\">Hubtill IOS & Android Native Scanner Apps</p>\n    <p>The functionality of both apps was exactly the same: by using the mobile camera, serve as substitute of the hand-held ordering scanners (<a href=\"https://www.opticon.com/\">www.opticon.com</a>) that some wholesalers provided to some of their customers.</p>\n    <p>The main task of Hubtill Scanner Apps was to scan product barcodes and create a list of products that can be ordered from the retailer's list of associated wholesalers. As quantities can be changed on-screen, each product only need to be scanned once.</p>\n    <p>Hubtill Scanner Apps are also connected with Hubtill Stocklist Web-App. This way the IOS and Android apps can also work as a scanner to create lists of products that need to be re-stocked on the front shop.</p>\n    <video class=\"portrait-video\" controls=\"controls\" autoplay=\"\" loop=\"\" muted=\"true\" playsinline=\"\">\n      <!-- WebM -->\n      <source src=\"/assets/videos/hubtill_scanner.webm\" type=\"video/webm\" />\n      <!-- MPEG-4 -->\n      <source src=\"/assets/videos/hubtill_scanner.mp4\" type=\"video/mp4\" />\n      <!-- Ogv -->\n      <source src=\"/assets/videos/hubtill_scanner.ogv\" type=\"video/ogv\" />\n    </video>\n    <p class=\"h5\">Hubtill Stocklist</p>\n    <p>The main goal of this application was improving efficiency in stores and warehouses throught a better stock management. The app maximised the shelf replenishment process and confirmed the transfer of products from the stock room to the shelves by using smartphones and tablets.</p>\n    <p>The tipical usage of the web-app was the following: one or more employees on the front shop generating a list of products needed to replenish the shelves. Once the builder confirmed the amount of products needed, different members of staff picked those products in the stock room.</p>\n    <p>The app allowed to generate as many lists as needed and organise them (by type of products, by suppliers...) to suit the needs of the business.</p>\n    <p>The lists were stored from one session to another, so they could be re-used every time the shelves needed to be replenished changing only the amount of each product.</p>\n    <video controls=\"controls\" autoplay=\"\" loop=\"\" muted=\"true\" playsinline=\"\">\n      <!-- WebM -->\n      <source src=\"/assets/videos/hubtill_stocklist.webm\" type=\"video/webm\" />\n      <!-- MPEG-4 -->\n      <source src=\"/assets/videos/hubtill_stocklist.mp4\" type=\"video/mp4\" />\n      <!-- Ogv -->\n      <source src=\"/assets/videos/hubtill_stocklist.ogv\" type=\"video/ogv\" />\n    </video>\n  </dd>\n  <dt>\n    Responsibilities\n  </dt>\n  <dd>\n    <ul>\n      <li>For Hubtill Search, I built a responsive user interface that consumed the Search REST API previously explained. The aim of this mini-app was to introduce the product to current Port80 customers and partners.</li>\n      <li>For Hubtill Scanner, I was responsible for the whole design process, from wireframes, to user flows, and then to the final UX/UI design for both IOS & Android platforms.</li>\n      <li>For Hubtill Stocklist, I was responsible for the UX/UI design as well as the transformation of the interactive prototype initially built with HTML, CSS and JS into AngularJS Directives and Controllers.</li>\n    </ul>\n  </dd>\n",
      "date_published": "2015-07-31T00:00:00Z"
    }
  ]
}
