<?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: Bea Oliveira</title>
    <description>The latest articles on DEV Community by Bea Oliveira (@beaolivei).</description>
    <link>https://dev.to/beaolivei</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%2F322692%2Fc91b0cbd-d8fb-4740-b107-04a770ee27ff.jpeg</url>
      <title>DEV Community: Bea Oliveira</title>
      <link>https://dev.to/beaolivei</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/beaolivei"/>
    <language>en</language>
    <item>
      <title>Building a scalable strategy for theming and components </title>
      <dc:creator>Bea Oliveira</dc:creator>
      <pubDate>Fri, 26 Mar 2021 19:55:22 +0000</pubDate>
      <link>https://dev.to/beaolivei/building-a-scalable-strategy-for-theming-and-components-4a8l</link>
      <guid>https://dev.to/beaolivei/building-a-scalable-strategy-for-theming-and-components-4a8l</guid>
      <description>&lt;p&gt;Hi there! 👋🏻&lt;/p&gt;

&lt;p&gt;As development advances, we want to make things as efficient and easy as possible. Technology moves forward and users start to expect new and better standards for their digital products. Developers, as the main builders of these technologies, go after those standards, pushing for more independent, clean, and maintainable code bases. On the front-end side, these discussions have boiled down to component-based development and the appearance of modern frameworks, such as React and Angular, that push for those changes as an industry standard. &lt;/p&gt;

&lt;p&gt;In this article, I will discuss my vision on how to make your theming and your components as efficient as possible, sharing some learnings I had along on my journey developing in such structures. &lt;/p&gt;

&lt;h3&gt;
  
  
  1. Why should we worry about Themes and Components?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Scalability&lt;/em&gt;: these types of strategies make your development faster as it re-uses the same UI through the entire app. Creating a new page is easier as it becomes mostly putting elements together and focusing on developing new things only when really introducing new features. This means, developers working more on adding value to the user and not constantly reinventing the wheel. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Consistency&lt;/em&gt;: it makes it much easier to keep your page experience consistent, almost effortlessly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Good-karma&lt;/em&gt;: when you develop like this you create a well-documented code, without writing one line of text. This decreases the mental load on the entire team (that can easily use the right colors, fonts, and elements) without weighting on their memory. And, besides, it makes it much easier for other developers to jump on board and start contributing to the product with a much softer learning curve. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. How to organize that, technically?
&lt;/h3&gt;

&lt;p&gt;Ok, you are all convinced, I bet! &lt;/p&gt;

&lt;p&gt;To start implementing this approach you first need to have an objective talk about using or not external component's libraries with the other stakeholders on your company. In this discussion, you need to align product vision with resources available. &lt;/p&gt;

&lt;p&gt;If your product has a very strong visual appeal, using a very different style then you will probably have to create your own component's library. You will most likely hit that situation if you are working with "cool" B2C products that focus on, well, being cool. Something in the likes of Spotify or Instagram or Tik Tok. That is because even though libraries offer good customization it is a more standardized approach. &lt;/p&gt;

&lt;p&gt;However, for most businesses, even though you want to have the freedom to add your themes and put together flows in different/ creative ways, you can achieve the wanted effect using an external library. If your business can use an external library, it really should. This approach saves a lot of development time and allows you to build on top, using a bunch of out-of-box solutions that will really speed things up. &lt;/p&gt;

&lt;p&gt;There are many external libraries out there, to mention a few: Ant Design, Semantic UI, Evergreen, Grommet, Material UI, and many others. It is always good to test many libraries until you find one that has the level of customization and diversity that you want for your project. When analyzing them, keep in mind the type of UI you will need to put your project together and the level of customization you request. &lt;/p&gt;

&lt;p&gt;I must admit that I do have a favorite and that would be the libraries based on the Material Design. I really like it because they are one of the most used ones in the market and, therefore, have a giant community discussing it. Also, whenever you have some doubt on how to approach a certain thing, like a dark theme or something of the sort, you can always refer back to the original Material Design and get the implementation answers you are looking for, in a faster way. &lt;/p&gt;

&lt;h3&gt;
  
  
  3. Organizing development with a designer's mind
&lt;/h3&gt;

&lt;p&gt;It creates nice sync in the team if the front-end project is architecture taking into consideration how designers approach layout creation. This means, starting from the basics. The first thing that needs to be easy, available and reusable in your app are colors, shadows and things like that.&lt;/p&gt;

&lt;p&gt;Material UI has a really nice approach to it as it offers a theme object that can be replaced and used throughout the entire app, being available in a global state.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;breakpoints: Object
direction: "ltr"
mixins: Object
overrides: Object
palette: Object
props: Object
shadows: Array(25)
typography: Object
spacing: f e()
shape: Object
transitions: Object
zIndex: Object
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
`&lt;br&gt;
(I know, it is so beautiful that I wanna cry 😢 )&lt;/p&gt;

&lt;p&gt;That object is consumed inside a createMUITheme() function that renders the theme in the ThemeProvider - a context Provider that &lt;em&gt;normally&lt;/em&gt; wraps the main  component. The beauty of this setup is that you can programmatically pass different theme objects inside that function and, as long as they follow the right theme structure, they can be applied hassle-free. This is super useful for creating a dark theme on your application, for instance. &lt;/p&gt;

&lt;p&gt;Of course, if you are not using Material UI you can still follow the same approach. Create a state on a global level, store a theme object and pass it in a way that it may be available through your entire application. React Context or Angular services are probably a good starting point to structure this. I think the key part here is to take your time creating this structured theme object with your design team. It will pay-off, for sure!&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Create a clear architecture aligned with your team's design approach
&lt;/h3&gt;

&lt;p&gt;When we are talking about Component-Based Development we are also (probably) talking about atomic design, which means, thinking about app layouts as smaller structures that compose a bigger entity. This means having small components, that compose functional compositions that end up forming a page. If that is the logic your design team is going to use (which is highly likely at this point in time), structure your folder also following that same naming pattern and distribution. &lt;/p&gt;

&lt;p&gt;There are some techs out there that push for that project structure approach and is worth it to check them out. Next.js is a very known one that will bring this structure to your project out-of-the-box. Of course, Next.js brings many other things under its hood, so you don't really need it for folder structure but if there are other parts of it that will help out on your project, it is a nice tech to check out. &lt;/p&gt;

&lt;p&gt;Side note: Even though that is not the point of this article, it is also valid to note that such a project structure will also help you out to structure your tests. So, your unit test probably will be more useful in your components, whereas your integration ones should go with your compositions and your e2e, well, probably on your pipeline, testing entire pages.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Use tools to document the components for developers and designers
&lt;/h3&gt;

&lt;p&gt;You are making something so cool, right? Now we have to make sure that people know what they can (and can't) re-use when creating something new. In that sense, creating alive documentation to be the source of truth in your organization is key.  &lt;/p&gt;

&lt;p&gt;On the development side, you can use a tool for developing UI in isolation, such as Storybook for example. You just need to install it once and remember to create a &lt;code&gt;.stories&lt;/code&gt; file whenever you create a new component. That will automatically create a folder that will display your developed UI. &lt;/p&gt;

&lt;p&gt;To better consolidate this shared understanding of the components, it is also recommended to keep a design system documentation that uses Storybook to show the available components displayed in Storybook plus extra design patterns of the organization. I normally use one called Zeroheight, even though there are several other commercial software from Figma and Adobe XD, for example. This step is normally maintained by a designer with the help of a developer. &lt;/p&gt;

&lt;p&gt;I hope this helps! These are just a few points for consideration that I think can help you build your front-end faster, more efficiently, and with less heartache! &lt;/p&gt;

&lt;p&gt;Happy coding, everyone! ✌️&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Nx in Storybook - part 2</title>
      <dc:creator>Bea Oliveira</dc:creator>
      <pubDate>Fri, 04 Dec 2020 13:30:54 +0000</pubDate>
      <link>https://dev.to/beaolivei/nx-in-storybook-part-2-9nh</link>
      <guid>https://dev.to/beaolivei/nx-in-storybook-part-2-9nh</guid>
      <description>&lt;p&gt;Hi there! 🖐🏻&lt;/p&gt;

&lt;p&gt;So, the day came in which we did a big refactor on our monorepo. We were expanding the number of projects that were going to be supported in our nx project and that called for a restructuring of the libs and dependencies to assure performance and coherence. As we started refactoring the libs we realized that was impractical to launch storybook for each one of the libraries, which was going to kill the whole point of having it on our project. &lt;/p&gt;

&lt;p&gt;I wrote a few months ago a post on how to install storybook on a nx project and if you didn't catch that first part, you can check it here:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/beaolivei" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hozxWHEE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--pCuO-B39--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/322692/c91b0cbd-d8fb-4740-b107-04a770ee27ff.jpeg" alt="beaolivei image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/beaolivei/using-storybook-in-an-nx-monorepo-pna" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Using storybook in an Nx monorepo&lt;/h2&gt;
      &lt;h3&gt;Bea Oliveira ・ Oct 26 ・ 3 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#components&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#monorepos&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#storybook&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;
In this one I share on how to install storybook with nx and the main thing is that you will have to add a config for storybook on root level and on each lib. And then you run it per lib (npm run storybook:mylib). 

&lt;p&gt;Now, I learned a way to actually be able to run all the stories inside the project at once. I think it can be a nice addition to those working with this.&lt;/p&gt;

&lt;p&gt;I got this idea from this video 💪👏&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/c323HOuFKkA"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h1&gt;
  
  
  1: Steps to fix the problem and my experience implementing it:
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;In the shared library create an upper-level lib using the create lib command for nx&lt;/li&gt;
&lt;li&gt;Install storybook inside the library &lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In config.js file change the path to the where the stories should be watched&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Replace:
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;configure(require.context('../src/lib', true,/\.stories\.tsx?$/), module);&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;With something like this:
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;configure(require.context('../..', true, /\.stories\.tsx?$/), module);&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Do you see it? That first part in context call back you should adjust to a higher level path, so it will take all the stories, even the ones in deeper libs. &lt;/p&gt;

&lt;p&gt;Last thing: run your new lib. And, there you go, it's ready! 🚀&lt;/p&gt;

&lt;p&gt;Hope it helps, peeps! &lt;/p&gt;

&lt;p&gt;Happy coding, everyone ✌️&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Setting a Dark Mode with Material UI</title>
      <dc:creator>Bea Oliveira</dc:creator>
      <pubDate>Mon, 16 Nov 2020 17:40:08 +0000</pubDate>
      <link>https://dev.to/beaolivei/setting-a-dark-mode-with-material-ui-nmk</link>
      <guid>https://dev.to/beaolivei/setting-a-dark-mode-with-material-ui-nmk</guid>
      <description>&lt;p&gt;Hey there!&lt;/p&gt;

&lt;p&gt;I recently worked on setting up a dark mode in a project using React and Material UI and I wanted to share some of the things I learned while doing that. There are each time more users that prefer using the web in dark mode for more reading comfort and it is a feature that is slowly becoming an industry-standard such as responsiveness and others. There are different tutorials online that explain how to set a dark mode theme using React Context and I really recommend you check them out if you haven't yet. In this post, however, I want to focus on my experience implementing it in a real, working commercial software, outlining some problems and ways my colleagues and I found to solve them. Here I will assume that you already have basic knowledge in React, React Context, Material Design, and Material UI. &lt;/p&gt;

&lt;p&gt;Ok. Let's get cracking, shall we? &lt;/p&gt;

&lt;h2&gt;
  
  
  1. Set a ThemeProvider and a getTheme() function from the beginning of the project
&lt;/h2&gt;

&lt;p&gt;When I started working on adding a different view mode I was positively surprised that my colleagues had already set up a ThemeProvider and proper getTheme() function in the project when they first started using the Material UI library. That is a cool practice because it is something that can be used both for applying themes from different users/clients (if your company ever takes that road) and it can also be used for adding a dark theme. This is a good practice when working with &lt;a href="https://material-ui.com/"&gt;Material UI&lt;/a&gt; as it allows you to manage your primaries, secondaries, information, and error colors in one unified file. Also, as far as creating legacy code goes this one guarantees positive karma on your account, for sure.&lt;/p&gt;

&lt;p&gt;You can find more information on how to set a theme and create a ThemeProvider in &lt;a href="https://material-ui.com/customization/theming/"&gt;Material UI's official documentation&lt;/a&gt;. There are also a few videos online that are super helpful. I recommend watching &lt;a href="https://www.youtube.com/watch?v=vyJU9efvUtQ"&gt;this one&lt;/a&gt; for a nice overview (the theme stuff can be found from minute 24:07). &lt;/p&gt;

&lt;p&gt;I think that one main thing to keep in mind when you apply this in a real-life project is that all these parts, the createTheme() function, the values from your palette, spacing, breakpoints, and so on, will be separated files. When creating your palette specifically you can follow the &lt;a href="https://material-ui.com/customization/default-theme/#default-theme"&gt;data structure used by MUI&lt;/a&gt; for their default theme, so you keep a matching structure. &lt;/p&gt;

&lt;h2&gt;
  
  
  2. Palette type dark magic
&lt;/h2&gt;

&lt;p&gt;Okay, so you have your ThemeProvider, your function, your separate palette files all beautifully created. Now, let's say you want to create a dark theme. The beauty of using Material UI is that you won't necessarily have to manually set colors for dark theme. You can only add a &lt;code&gt;type&lt;/code&gt; value 'dark' and boom. Magic! &lt;/p&gt;

&lt;p&gt;So inside your dark-theme.colors.ts you will have something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;palette: {
    type: 'dark',
    primary: {
      light: myColors.grayLight,
      main: myColors.gray,
      dark: myColors.grayDark,
    },
    secondary: {
      light: myColors.whitesmoke,
      main: myColors.white,
      dark: myColors.snow,
    },
    info: {
      light: myColors.greenLight,
      main: myColors.green,
      dark: myColors.greenDark,
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, this will only work if you followed the Mui default theme structure. This means that for your background you used something like &lt;code&gt;theme.palette.background.default&lt;/code&gt; and for your text color something like &lt;code&gt;theme.palette.text.primary&lt;/code&gt;. If you did that then you are almost there. &lt;/p&gt;

&lt;p&gt;Honestly, in this process, the trickiest part is dealing with the primaries and secondaries for the dark theme. Normally the designs are done mixing and matching the color scheme. Sometimes the primary is the background and sometimes it is the font color. This type of setting will make the dark mode harder to manage for sure and these are the situations that you will need to spend more time figuring out how to adapt to. This is one of these situations that having good design-ops and a nicely done design system that takes into account a dark version of components will come a long way (owww ideal world, how we wish you could ever be real ❤️). &lt;/p&gt;

&lt;h2&gt;
  
  
  3. Managing the view mode state in the AppProvider level
&lt;/h2&gt;

&lt;p&gt;I guess that this is the part that is the hardest to abstract from the tutorials, after all, you will need to find a way to change the state in the AppProvider level, in which you will pass the value theme for your ThemeProvider. However, differently from the tutorials, your button that sets the state will probably not be in the same file. You probably will keep your button on a navigation bar or some other element that is elsewhere in your app. One solution we used to make this value available at the highest level was saving it as a cookie. So, when the action button for view mode was clicked, then I would set a cookie with the right file theme name. This way we could also save the user preference for the future and next time they were on our platform they would see their last preferred view mode.&lt;/p&gt;

&lt;p&gt;Great. The value is saved. But, if the user clicks on the button we don't want the page to reload, right? Another important question for us then was how to change the value passed to the Theme Provider without triggering a reload? The solution here was to actually pass a function instead of a value to the ThemeProvider.&lt;/p&gt;

&lt;p&gt;So, in your AppProvider.tsx level you would have something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;interface AppProviderProps extends RandomEl {
  randomData: {
    viewMode?: Brand;
  };
}

const AppProvider: React.FC&amp;lt;AppProviderProps&amp;gt; = ({ ...props }) =&amp;gt; {
  const { randomData, children } = props;
  const [viewMode, setViewMode] = useState(userData.viewMode);

  return (
    &amp;lt;StylesProvider injectFirst&amp;gt;
       &amp;lt;MaterialThemeProvider theme={getTheme(viewMode)}&amp;gt;
         &amp;lt;ThemeProvider theme={getTheme(viewMode)}&amp;gt;
         &amp;lt;/ThemeProvider&amp;gt;
       &amp;lt;/MaterialThemeProvider&amp;gt;
    &amp;lt;/StylesProvider&amp;gt;
  );
};

export { AppProvider };
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This way, when the cookie value changed, we were able to trigger a state change in the AppProvider level and display a different view mode without a reload. &lt;/p&gt;

&lt;p&gt;Of course, there are many different ways of doing this. But the idea in this article was to just bring some ideas to those who may be working on something similar. &lt;/p&gt;

&lt;p&gt;Happy coding, everyone! &lt;/p&gt;

</description>
      <category>material</category>
      <category>design</category>
      <category>darkmode</category>
      <category>react</category>
    </item>
    <item>
      <title>Using storybook in an Nx monorepo</title>
      <dc:creator>Bea Oliveira</dc:creator>
      <pubDate>Mon, 26 Oct 2020 11:33:47 +0000</pubDate>
      <link>https://dev.to/beaolivei/using-storybook-in-an-nx-monorepo-pna</link>
      <guid>https://dev.to/beaolivei/using-storybook-in-an-nx-monorepo-pna</guid>
      <description>&lt;p&gt;Hi there! 👋 &lt;/p&gt;

&lt;p&gt;I have been working with Storybook as a layer of component management in projects for a while now. It is quite a nice tool when working with components as it makes it much easier for myself and the team to remember all the components we have already created and how to easily implement them in other parts of the platform. Recently, I started working on a new project, and even though the project already had Storybook installed, it was outdated and it wasn't running anymore. Because I believe that it is a tool that helps the workflow, I decided to fix it. The project is an nx monorepo and when trying to fix it on our project I learned that setting up Storybook for that sort of project has a few particularities. Maybe some of you will go through this as well, so I decided I could share a bit of my experience with it.&lt;/p&gt;

&lt;p&gt;So here are some of my learnings:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The CLI Installation for Storybook doesn't work in monorepos
&lt;/h2&gt;

&lt;p&gt;Ok, so my first idea was to just uninstall everything and run their CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx sb init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is the first step for installation recommended in &lt;a href="https://storybook.js.org/docs/react/get-started/install"&gt;Storybook's official documentation&lt;/a&gt; and it is so beautiful when it works. Very elegant and simple ❤️&lt;br&gt;
It works in most types of projects however with the nx monorepo it won't do the trick. The CLI will install storybook in your project and it will work at first, however with the CLI installation the monorepo folder structure won't be respected and you will have problems afterward when deploying it. Long story short, better just skip the CLI installation in that case, because it won't work in the long run. &lt;/p&gt;
&lt;h2&gt;
  
  
  2. You need to follow the documentation that is on the NX website
&lt;/h2&gt;

&lt;p&gt;Well, when my first attempt following standard Storybook documentation didn't work I went to look if there is anything in the NX documentation. And, voilá, there is specific documentation about Storybook for Nx that you can check in &lt;a href="https://nx.dev/latest/angular/plugins/storybook/overview"&gt;this link&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;It is a two-step process. First, you need to add the plugin.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm add --dev @nrwl/storybook 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And then, inside the app you want to have Storybook you need to generate the specific configuration.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nx g @nrwl/angular:storybook-configuration project-name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;PS: the command above is for projects built in angular, if yours is in react just change the word "angular" in the line above to "react".&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. You need to install it for each app you wanna have Storybook inside your project
&lt;/h2&gt;

&lt;p&gt;This is the biggest difference when running Storybook in a monorepo: you will have to install it in one specific app and it will only render stories that are inside such app. So, if you have inside your monorepo one library in which you keep your components that is probably the best one to install Storybook in. &lt;/p&gt;

&lt;p&gt;Another important difference is that when launching storybook you will have to specify which project you want to launch with that. Imagining that you installed it in your component library that is called MyComponents, to launch it you would type in the command line something like with this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run storybook:MyComponents
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Of course, if you keep a different folder structure and actually each app has its own components inside your monorepo you will have to install it in each project and they will have to be run separately. In this case, it could possibly make your monorepo build slower if when you build it you also deploy a public version of your storybook, for example. So, keep it in mind as well. &lt;/p&gt;

&lt;p&gt;Hope it helps! &lt;br&gt;
Happy coding, everyone ✌️&lt;/p&gt;

</description>
      <category>components</category>
      <category>monorepos</category>
      <category>storybook</category>
    </item>
    <item>
      <title>Design System: Heaven or Hell?</title>
      <dc:creator>Bea Oliveira</dc:creator>
      <pubDate>Wed, 01 Jul 2020 12:15:38 +0000</pubDate>
      <link>https://dev.to/beaolivei/design-system-heaven-or-hell-25mc</link>
      <guid>https://dev.to/beaolivei/design-system-heaven-or-hell-25mc</guid>
      <description>&lt;p&gt;Design Systems have been booming all around the tech world. Frameworks based on components and overall market need for brands to communicate the same image throughout products and channels have made design systems a popular dream between big and growing companies. Normally, the design system gathers the companies' shared components and elements that need to be reused on different apps, web platforms, Instagram campaigns, Power BI dashboards, you name it. So, to be more specific: buttons, lists, tables, colors, fonts ... Pretty much all you need to have a coherent look for the brand on a product and communication level.&lt;/p&gt;

&lt;p&gt;The thing is, even though design systems are a very cool thing, the practicalities on how to operationalize it are still a hard thing to crack. That is because there is a complicated puzzle at the center of this whole discussion. The bigger the company, the more important to have a design system. After all, bigger companies have different products on different platforms and teams spread on different places on earth. However, the bigger you are the harder it is to make an effective design system exactly because you have different (already developed) products and different systems all around.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RzubozBO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/s1bb0d32iki2e9exlc2w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RzubozBO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/s1bb0d32iki2e9exlc2w.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have experienced first hand putting together a design system in a huge company with many different products and let me tell you, that is a hustle. If for one side you need to centralize the designs somehow, on the other you can not depend only on the design system team's workforce. Besides that, in a big company, different design needs came from different business' contexts. Also and perhaps even more problematic, when we talk about components there is a matter of implementation. Can you imagine one team being responsible for the components' design and implementation of more than 40 products? It is virtually impossible.&lt;/p&gt;

&lt;p&gt;After starting working with this, I got the habit of going into cool companies' design websites. Many of these companies keep a .design domain - such as &lt;a href="https://spotify.design/"&gt;Spotify&lt;/a&gt;, &lt;a href="https://design.google/"&gt;Google&lt;/a&gt;, &lt;a href="https://airbnb.design/"&gt;Airbnb&lt;/a&gt;, and &lt;a href="https://facebook.design/"&gt;Facebook&lt;/a&gt; - in which they share articles and news on their design systems. By benchmarking that way, I noticed that when it comes to this topic there is no one size fits all solution, unfortunately. And normally the approach is iterated many times. I believe that finding the sweet spot between centralizing the design and simplifying the production pipeline depends on how your company is already shaped and how much adoption you are going to find in it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--t9hh1lcT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/m0rbjb8a3yzfxo3l9vf0.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--t9hh1lcT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/m0rbjb8a3yzfxo3l9vf0.jpeg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is important to take into account that the design systems won't live outside your development process, so the rules of that development flow will apply to it as well. For example, one thing that we know well in the tech development world is that rooted legacy systems make everything harder. I would say that depending on how much legacy you have, the more realistic you need to be on your design system's potential reach. Do not go around talking about the component library and other cool-modern things if your system was build using something old, like AngularJS or PHP monoliths. In that case, I would say that there is a need to have an honest conversation between development and design on how far can we go with the unification. The trick in that situation, I believe, is to remember that the goal is to have a coherent design and even though it may seem that a component library is the only way to do that, that simply isn't true. A component library can't guarantee the success of your design system, neither its absence will necessarily result in its failure.&lt;/p&gt;

&lt;p&gt;The situation is, of course, different for new companies. In that case, I believe that the design system should be developed from the early days on its full glory. The catch here is that early-stage companies are fully focused on survival and the rest seems secondary, but that is exactly the right time to start building good foundations for the future. Investing in openly sharing within the organization a component library, version-controlled design files, and code, will payout in the future, for sure. Having a reviewing process that expands the individual teams can also work as a way to generate accountability to the unified design guidelines.&lt;/p&gt;

&lt;p&gt;Finally, on a more practical note, one common thing that is useful for building a design system in any size company is to offer well-documented guidelines. You may or may not be able to provide assets such as components or things like that, but you can always offer complete and clear documentation on what is the unified design patterns that represent your company as a brand. Also, the design team should always see themselves as a support system inside the company. Talented people are working on different teams and these people are probably the best at understanding that product and team-specific need. There needs to be trust, a rigorous accountability system, and clear communication so that a coherent design can be developed throughout the teams in a seemly organic way.&lt;/p&gt;

</description>
      <category>design</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The impostor inside</title>
      <dc:creator>Bea Oliveira</dc:creator>
      <pubDate>Fri, 12 Jun 2020 10:30:17 +0000</pubDate>
      <link>https://dev.to/beaolivei/the-impostor-inside-4f2d</link>
      <guid>https://dev.to/beaolivei/the-impostor-inside-4f2d</guid>
      <description>&lt;p&gt;There is no news here: most women suffer from impostor syndrome. If you have never heard of the term before, it refers to that weird gutsy feeling you get once you get a job, a promotion, or stands out in any way. You can recognize it in that little voice that tells you you are not enough and that sooner or later someone will discover you are a fraud. It is a crippling feeling that makes a lot of things in our career harder than they should be. &lt;/p&gt;

&lt;p&gt;I believe that impostor syndrome plays a big role in the gender gap that undoubtedly exists in tech nowadays. As a woman and a programmer, I have identified on myself and my colleagues how this feeling damages our mental health and career progression. It makes us afraid of trying and unsure of our potential. Because programming is an art of practice much more than a skill you can acquire just by reading about it, insecurity and the fear of being discovered as a fraud hinders many women from daring and taking risks, which ultimately affects women's presence on the tech market. &lt;/p&gt;

&lt;p&gt;I understand that feeling insecure is not a women's prerogative, there are many men out there that can relate to that. However,  the impostor syndrome thing goes deeper than insecurity and it plays a structural role in gender inequality in the market place, especially in the programming sector because of its particular characteristics.&lt;/p&gt;

&lt;p&gt;As I said in the beginning, this is no news. Actually, it is a very old discussion, so why write about it again? Because I believe that only when we address this dark brain pattern, call it by its name and recognize who it is affecting the most, then we can start making real change in tech. As someone that is in the job market and lives it on a daily basis, I know that the change we need isn't here yet. And, I believe that it is women's prerogative to talk about their own experience in the area, so we can push for change. &lt;/p&gt;

&lt;p&gt;Besides boosting the discussion around it, I believe that we also need to unite. I have been quite the nomad for the last few years and I lived in different countries. However, one thing that has grounded me during all these changes is finding women in tech groups. It is a powerful and revolutionary thing when we help one another. By talking and recognizing the common struggles we can be each other's counterpart to impostor syndrome. When we help another woman overcome its fear of failure, her success becomes a flash of hope that someday reality can be different for ourselves and others like us.&lt;/p&gt;

</description>
      <category>womenintech</category>
      <category>career</category>
    </item>
    <item>
      <title>The impostor inside</title>
      <dc:creator>Bea Oliveira</dc:creator>
      <pubDate>Mon, 08 Jun 2020 22:31:54 +0000</pubDate>
      <link>https://dev.to/beaolivei/how-to-prevent-coworkers-from-exploiting-your-impostor-syndrome-25c5</link>
      <guid>https://dev.to/beaolivei/how-to-prevent-coworkers-from-exploiting-your-impostor-syndrome-25c5</guid>
      <description>&lt;p&gt;There is no news here: most women suffer from impostor syndrome. If you have never heard of the term before, it refers to that weird gutsy feeling you get once you get a job, a promotion, or stands out in any way. You can recognize it in that little voice that tells you you are not enough and that sooner or later someone will discover you are a fraud. It is a crippling feeling that makes a lot of things in our career harder than they should be. &lt;/p&gt;

&lt;p&gt;I believe that impostor syndrome plays a big role in the gender gap that undoubtedly exists in tech nowadays. As a woman and a programmer, I have identified on myself and my colleagues how this feeling damages our mental health and career progression. It makes us afraid of trying and unsure of our potential. Because programming is an art of practice much more than a skill you can acquire just by reading about it, insecurity and the fear of being discovered as a fraud hinders many women from daring and taking risks, which ultimately affects women's presence on the tech market. &lt;/p&gt;

&lt;p&gt;I understand that feeling insecure is not a women's prerogative, there are many men out there that can relate to that. However,  the impostor syndrome thing goes deeper than insecurity and it plays a structural role in gender inequality in the market place, especially in the programming sector because of its particular characteristics.&lt;/p&gt;

&lt;p&gt;As I said in the beginning, this is no news. Actually, it is a very old discussion, so why write about it again? Because I believe that only when we address this dark brain pattern, call it by its name and recognize who it is affecting the most, then we can start making real change in tech. As someone that is in the job market and lives it on a daily basis, I know that the change we need isn't here yet. And, I believe that it is women's prerogative to talk about their own experience in the area, so we can push for change. &lt;/p&gt;

&lt;p&gt;Besides boosting the discussion around it, I believe that we also need to unite. I have been quite the nomad for the last few years and I lived in different countries. However, one thing that has grounded me during all these changes is finding women in tech groups. It is a powerful and revolutionary thing when we help one another. By talking and recognizing the common struggles we can be each other's counterpart to impostor syndrome. When we help another woman overcome its fear of failure, her success becomes a flash of hope that someday reality can be different for ourselves and others like us.   &lt;/p&gt;

</description>
      <category>womenintech</category>
      <category>career</category>
    </item>
    <item>
      <title>Placeholder title</title>
      <dc:creator>Bea Oliveira</dc:creator>
      <pubDate>Wed, 22 Apr 2020 18:13:01 +0000</pubDate>
      <link>https://dev.to/beaolivei/placeholder-title-1jg6</link>
      <guid>https://dev.to/beaolivei/placeholder-title-1jg6</guid>
      <description>&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Category Submission:
&lt;/h4&gt;

&lt;h2&gt;
  
  
  Demo Link
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Link to Code
&lt;/h2&gt;

&lt;h2&gt;
  
  
  How I built it (what's the stack? did I run into issues or discover something new along the way?)
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Additional Resources/Info
&lt;/h2&gt;

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