<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: omar assadi</title>
    <description>The latest articles on DEV Community by omar assadi (@omarassadi).</description>
    <link>https://dev.to/omarassadi</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%2F143393%2F038e44c1-b997-46b5-8e1e-aa8b97798cb2.jpg</url>
      <title>DEV Community: omar assadi</title>
      <link>https://dev.to/omarassadi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/omarassadi"/>
    <language>en</language>
    <item>
      <title>How are we structuring Front End at Helixa</title>
      <dc:creator>omar assadi</dc:creator>
      <pubDate>Tue, 09 Apr 2019 06:50:04 +0000</pubDate>
      <link>https://dev.to/omarassadi/how-are-we-structuring-front-end-at-helixa-1e78</link>
      <guid>https://dev.to/omarassadi/how-are-we-structuring-front-end-at-helixa-1e78</guid>
      <description>&lt;p&gt;Here at Helixa we are at the beginning of a long journey when talking about Front End Development since we are creating the basis for all our future projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  The goal
&lt;/h2&gt;

&lt;p&gt;We are going to build multiple client side SaaS applications with a central application called &lt;em&gt;Account&lt;/em&gt; that will work as an Identity Server.&lt;/p&gt;

&lt;p&gt;All future apps will need to share multiple components and look alike but with a custom &lt;em&gt;Palette&lt;/em&gt; for visually differencing &lt;strong&gt;products&lt;/strong&gt; one from another. &lt;/p&gt;

&lt;h4&gt;
  
  
  A common language
&lt;/h4&gt;

&lt;p&gt;In order to share a common language with our UX/UI Designer we follow the &lt;em&gt;Atomic Design principles&lt;/em&gt; (check out &lt;a href="http://atomicdesign.bradfrost.com/chapter-2/" rel="noopener noreferrer"&gt;Brad Frost's post about Atomic Design&lt;/a&gt;) and started building &lt;em&gt;Atoms&lt;/em&gt;, &lt;em&gt;Molecules&lt;/em&gt; and &lt;em&gt;Organisms&lt;/em&gt; that we'll need in order to implement our products' front end.&lt;/p&gt;

&lt;p&gt;Since we will need to share and reuse components throughout all of our future apps we started from building a &lt;strong&gt;&lt;em&gt;components library&lt;/em&gt;&lt;/strong&gt; called &lt;em&gt;hx-react-components&lt;/em&gt; that will also work as the source of truth for how every component should look and work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stack and Tools
&lt;/h2&gt;

&lt;p&gt;Here's a list of libs and tools the Helixa Front End Team deals with.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;React&lt;/strong&gt;: &lt;em&gt;React is a declarative, efficient, and flexible JavaScript library for building user interfaces. It lets you compose complex UIs from small and isolated pieces of code called “components”.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Styled Components&lt;/strong&gt;: &lt;em&gt;Utilising tagged template literals (a recent addition to JavaScript) and the power of CSS, styled-components allows you to write actual CSS code to style your components.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Storybook&lt;/strong&gt;: &lt;em&gt;Storybook is an open source tool for developing UI components in isolation for React, Vue, and Angular. It makes building stunning UIs organized and efficient.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F11qmx99xt9nixfc8noad.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%2F11qmx99xt9nixfc8noad.gif" alt="Helixa Components Storybook"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Storybook: &lt;a href="https://storybook.js.org" rel="noopener noreferrer"&gt;https://storybook.js.org&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CirlceCi&lt;/strong&gt;: &lt;em&gt;CircleCI’s continuous integration and delivery platform makes it easy for teams of all sizes to rapidly build and release quality software at scale.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F7w080aw4cj99svgdxzat.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%2F7w080aw4cj99svgdxzat.png" alt="Helixa Components CircleCi"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CircleCi: &lt;a href="https://circleci.com" rel="noopener noreferrer"&gt;https://circleci.com&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Our own components library
&lt;/h2&gt;

&lt;p&gt;First: why writing a component library ?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dev Velocity&lt;/strong&gt;: Don’t impair the library’s adoption, enabling developers to collaborate and evolve the components.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Consistency&lt;/strong&gt;: Keep consistency but leave room to play when possible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maintenance &amp;amp; Standardization&lt;/strong&gt;: Unify your tech stack and simplify maintenance through smart architectures and tooling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance&lt;/strong&gt;: Don’t use cross-libraries whenever possible, use individual components instead of the whole library.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Discoverability&lt;/strong&gt;: Leverage discoverability platforms to help developers find and use the components they need.&lt;/p&gt;

&lt;h2&gt;
  
  
  The process
&lt;/h2&gt;

&lt;p&gt;This is a common structure of a &lt;em&gt;component&lt;/em&gt; folder:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F2kkodsgtujk3rwgpvv24.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%2F2kkodsgtujk3rwgpvv24.png" alt="Helixa Component Folder Structure"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every component has: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;em&gt;Component.js&lt;/em&gt; Implementation file.&lt;/li&gt;
&lt;li&gt;A &lt;em&gt;StyledComponent.js&lt;/em&gt; file&lt;/li&gt;
&lt;li&gt;A &lt;em&gt;Component.stories.js&lt;/em&gt; file that describes the it's showcase page on Storybook.&lt;/li&gt;
&lt;li&gt;A &lt;em&gt;Component.spec.js&lt;/em&gt; with all the unit tests.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We've set unit tests coverage at 80% minimum.&lt;/p&gt;

&lt;p&gt;This is how we work: every task (A new component, a fix etc etc) has it's own branch and goes trough the same flow: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pull Request to Master&lt;/li&gt;
&lt;li&gt;Review&lt;/li&gt;
&lt;li&gt;Merge&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every time a new commit comes on any &lt;em&gt;branch&lt;/em&gt; our &lt;strong&gt;CI&lt;/strong&gt; (CircleCi) will run a list of &lt;strong&gt;unit tests&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;On every commit on &lt;em&gt;master&lt;/em&gt; branch our &lt;strong&gt;CI&lt;/strong&gt; runs multiple sequential jobs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Runs unit tests&lt;/li&gt;
&lt;li&gt;Build a Storybook static version&lt;/li&gt;
&lt;li&gt;Deploys the new version on AWS (&lt;a href="http://components.helixa.ai" rel="noopener noreferrer"&gt;http://components.helixa.ai&lt;/a&gt;) &lt;/li&gt;
&lt;li&gt;Updates the &lt;em&gt;package&lt;/em&gt; version (via &lt;em&gt;npm version&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Publish the new package on &lt;strong&gt;NPM&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Push changes to git&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Handling SVGs Icons
&lt;/h2&gt;

&lt;p&gt;All apps need &lt;strong&gt;icons&lt;/strong&gt; and this is how we consume &lt;strong&gt;svgs&lt;/strong&gt; at Helixa.&lt;/p&gt;

&lt;p&gt;We have a git repository where UX/UI team can easily add Svg files.&lt;br&gt;
On every push on master branch the amazing &lt;a href="https://www.npmjs.com/package/husky" rel="noopener noreferrer"&gt;husky&lt;/a&gt; will run a script for us:&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://jsfiddle.net/assadiomar/u6r7mef8/embedded/js//dark" width="100%" height="600"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Basically all svgs files added to the &lt;em&gt;/src&lt;/em&gt; folder get optimized using &lt;strong&gt;svgo&lt;/strong&gt; and the their svg mono path gets extracted (thanks to &lt;a href="https://www.npmjs.com/package/extract-svg-path%20package" rel="noopener noreferrer"&gt;extract-svg-path&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;An icons.json file is then written like so:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "alert": "M18,26h4v4h-4V26z M20,10c1.1,0,2,0.9,2,2v8c0,1.1-0.9,2-2,2s-2-0.9-2-2v-8C18,10.9,18.9,10,20,10z M20,40c11,0,20-9,20-20 S31,0,20,0S0,9,0,20S9,40,20,40z",
  "add": "M37.1,22.9H22.9v14.3c0,1.6-1.3,2.9-2.9,2.9s-2.9-1.3-2.9-2.9V22.9H2.9C1.3,22.9,0,21.6,0,20s1.3-2.9,2.9-2.9 h14.3V2.9C17.1,1.3,18.4,0,20,0s2.9,1.3,2.9,2.9v14.3h14.3c1.6,0,2.9,1.3,2.9,2.9S38.7,22.9,37.1,22.9",
  "arrow_down": "M1.7,16.5L16.1,32c2.2,2.3,5.7,2.3,7.9,0l14.4-15.5c3.5-3.8,1-10.2-4-10.2H5.5C0.6,6.4-1.9,12.8,1.7,16.5",
  "arrow_up": "M38.3,23.5L23.9,8c-2.2-2.3-5.7-2.3-7.9,0L1.6,23.5c-3.5,3.8-1,10.2,4,10.2h28.9C39.4,33.6,41.9,27.2,38.3,23.5",
  "chevron_down": "M22.5,30.6L39,14.2c1.4-1.4,1.4-3.7,0-5c-1.4-1.4-3.7-1.4-5,0L20,23L6.1,9.2c-1.4-1.4-3.7-1.4-5,0s-1.4,3.7,0,5 l16.4,16.4C18.8,32,21.1,32,22.5,30.6",
  "chevron_up": "M17.6,9.2L1.1,25.6c-1.4,1.4-1.4,3.7,0,5c1.4,1.4,3.7,1.4,5,0l14-13.8L34,30.6c1.4,1.4,3.7,1.4,5,0s1.4-3.7,0-5L22.6,9.2 C21.3,7.8,19,7.8,17.6,9.2",
  "delete": "M6.7,35.6c0,2.4,2,4.4,4.4,4.4h17.8c2.4,0,4.4-2,4.4-4.4V13.3c0-2.4-2-4.4-4.4-4.4H11.1c-2.4,0-4.4,2-4.4,4.4 V35.6z M33.3,2.2h-5.6l-1.6-1.6c-0.4-0.4-1-0.6-1.6-0.6h-9.3c-0.6,0-1.2,0.2-1.6,0.6l-1.6,1.6H6.7c-1.2,0-2.2,1-2.2,2.2 c0,1.2,1,2.2,2.2,2.2h26.7c1.2,0,2.2-1,2.2-2.2C35.6,3.2,34.6,2.2,33.3,2.2z",
  "done": "M12.3,29.3L4.1,21C3.1,20,1.6,20,0.7,21c-0.9,0.9-0.9,2.4,0,3.4l10,10c0.9,0.9,2.4,0.9,3.4,0L39.3,9.1 c0.9-0.9,0.9-2.4,0-3.4c-0.9-0.9-2.4-0.9-3.4,0L12.3,29.3z",
  "download": "M22.2,21.5l4.2-4.2c0.9-0.9,2.3-0.9,3.1,0c0.9,0.9,0.9,2.3,0,3.1l-8,8c-0.9,0.9-2.3,0.9-3.1,0l-8-8c-0.9-0.9-0.9-2.3,0-3.1 c0.9-0.9,2.3-0.9,3.1,0l4.2,4.2V2.2C17.8,1,18.8,0,20,0s2.2,1,2.2,2.2V21.5z M35.6,22.2v11.1c0,1.2-1,2.2-2.2,2.2H6.7 c-1.2,0-2.2-1-2.2-2.2V22.2c0-1.2-1-2.2-2.2-2.2S0,21,0,22.2v13.3C0,38,2,40,4.4,40h31.1c2.4,0,4.4-2,4.4-4.4V22.2 c0-1.2-1-2.2-2.2-2.2S35.6,21,35.6,22.2z",
  "edit": "M0,32.1v6.8C0,39.5,0.5,40,1.1,40h6.8c0.3,0,0.6-0.1,0.8-0.3l24.3-24.2l-8.3-8.3L0.3,31.3 C0.1,31.6,0,31.8,0,32.1 M39.4,9c0.9-0.9,0.9-2.3,0-3.1l-5.2-5.2c-0.9-0.9-2.3-0.9-3.1,0L27,4.7l8.3,8.3L39.4,9",
 ...
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now any consuming project will no longer need to point to some hosted svg files but can recreate the svg on the fly by simply passing the path described in the &lt;em&gt;icons.json&lt;/em&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;StyledIcon&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./StyledIcon&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;icons&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hx-icons/icons&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Icon&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fallback&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;M79.1545988,120.621554 C75.1703482,120.614249...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;icon&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;icons&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;icon&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;icons&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;icon&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;fallback&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;StyledIcon&lt;/span&gt; &lt;span class="p"&gt;{...&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;svg&lt;/span&gt;
        &lt;span class="nx"&gt;xmlns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;http://www.w3.org/2000/svg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="nx"&gt;viewBox&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;`0 0 40 40`&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/svg&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/StyledIcon&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;p&gt;We are just at the beginning of the path but very excited of what's coming next.&lt;/p&gt;

&lt;p&gt;We've started testing the amazing e2e framework &lt;a href="https://www.cypress.io/" rel="noopener noreferrer"&gt;Cypress&lt;/a&gt; that looks very promising. We'll soon talk about that in a future blog posts so stay in touch.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Do you like this approach? If you are interested in working here at Helixa take a look at our &lt;a href="https://www.helixa.ai/about-helixa#careers" rel="noopener noreferrer"&gt;careers page&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>styledcomponents</category>
      <category>automation</category>
    </item>
  </channel>
</rss>
