<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Gionatha</title>
    <description>The latest articles on Forem by Gionatha (@gionatha).</description>
    <link>https://forem.com/gionatha</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%2F854763%2F7c4c4558-34cf-42b1-b3d8-767c818457f7.png</url>
      <title>Forem: Gionatha</title>
      <link>https://forem.com/gionatha</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/gionatha"/>
    <language>en</language>
    <item>
      <title>My TOP 3 UI Design TIPS for Developers</title>
      <dc:creator>Gionatha</dc:creator>
      <pubDate>Thu, 22 Dec 2022 22:43:02 +0000</pubDate>
      <link>https://forem.com/gionatha/my-top-3-ui-design-tips-for-developers-1pij</link>
      <guid>https://forem.com/gionatha/my-top-3-ui-design-tips-for-developers-1pij</guid>
      <description>&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;Start with features&lt;/li&gt;
&lt;li&gt;Don't focus on details&lt;/li&gt;
&lt;li&gt;Split your features&lt;/li&gt;
&lt;li&gt;Conclusions&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/7_HQKX2vTBc"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;As a developer, when it comes to build my own application, I always have the tendency to borrow UI design from other websites or simply to work with design created by someone else, like a designer.&lt;/p&gt;

&lt;p&gt;I never cared about design concepts such as colors, fonts, typoghraphy, emphasizing techniques, hierarchy patterns etc..&lt;/p&gt;

&lt;p&gt;I used to think that Designing and Implementing an UI were 2 separate world that which must be handled from different roles (a designer and a developer). &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Well i was wrong.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Recently i came across a book called &lt;strong&gt;&lt;a href="https://refactoringui.com" rel="noopener noreferrer"&gt;Refactoring UI&lt;/a&gt;&lt;/strong&gt; written by the creators of TailwindCSS (shout out to them).&lt;/p&gt;

&lt;p&gt;That book changed my idea of just being a developer who is only capable to work with pre designed UI to be a developer who are &lt;strong&gt;able to design his own UI&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;If you are like me and never approach before the concepts beyond UI / UX design and only cared about how to implement an UI with the latest frontend framework, I highly recommend you to read this book because is full of insights made specifically for developers.&lt;/p&gt;

&lt;p&gt;While reading this book i came across with 3 useful designing tips which i'm sure will benefit your journey as a frontend developer dealing with Design.&lt;/p&gt;

&lt;p&gt;Let's see them.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Start with features
&lt;/h2&gt;

&lt;p&gt;Every time i start working on the design of a brand new application, i used to always start implementing first the layout of the application.&lt;/p&gt;

&lt;p&gt;So i generally start thinking about whether to choose from a top navbar instead of a sidebar, how to display the navigation links, whether to choose from a container layout instead of a full width layout and so on.&lt;/p&gt;

&lt;p&gt;Well let me say that this approach might be not the best, because at this early stage of development &lt;strong&gt;we are lacking of informations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Especially if you are on your own and don't have an UI design to follow through, a better approach will be to &lt;strong&gt;start implementing first some basic features of your application&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example let's say i'm working on an hotel booking platform.&lt;/p&gt;

&lt;p&gt;Following this approach, the first thing that i would start implementing , will be a feature that will permits the user to search for an hotel. &lt;/p&gt;

&lt;p&gt;In this case i would start to laid out a form where the user can fill out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the place where he will stay&lt;/li&gt;
&lt;li&gt;the check in and check out dates&lt;/li&gt;
&lt;li&gt;the price range&lt;/li&gt;
&lt;li&gt;the numbers of bedroom that he needs&lt;/li&gt;
&lt;li&gt;and a search button&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmugcozw62daanxs3ly0i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmugcozw62daanxs3ly0i.png" alt="Hotel Search Form" width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After that i get my input search functionality, i could start working on a new feature, for instance the result list of hotels that the search has found.&lt;/p&gt;

&lt;p&gt;In this case i would need to implement a list of hotel preview template where each one will have: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;an hotel image&lt;/li&gt;
&lt;li&gt;hotel’s address&lt;/li&gt;
&lt;li&gt;hotel's price&lt;/li&gt;
&lt;li&gt;and the button to send the reservation to the hotel&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fae9dsn4qlwm7y4ucigin.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fae9dsn4qlwm7y4ucigin.png" alt="Hotel Preview" width="800" height="255"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Only after having implemented at least some basic functionalities around my app, i could start caring about things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how to manage the navigation between these pages&lt;/li&gt;
&lt;li&gt;choosing from a navigation bar or a sidebar&lt;/li&gt;
&lt;li&gt;implementing a footer&lt;/li&gt;
&lt;li&gt;or where to place the application logo image&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this way i would have much more information about my app functionalities and therefore i will make better decision when it comes to dealing with the layout offered by the application.&lt;/p&gt;

&lt;p&gt;Remember when it comes to design an user interface we often have to take important decision in order to achieve a great user experience..&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So the more information we'll have on our side the better decisions we'll make&lt;/strong&gt; &lt;/p&gt;




&lt;h2&gt;
  
  
  2. Don't focus on details
&lt;/h2&gt;

&lt;p&gt;In the earliest stages of designing a new feature like the hotel booking search functionality, it’s important that we don’t get hung up making low-level decisions about particular details like colors, font styles, shadows, icons, and things like that.&lt;/p&gt;

&lt;p&gt;In particular I identified 3 cases in which i personally tend to spend too much time, early on.&lt;/p&gt;

&lt;h3&gt;
  
  
  Colors picking
&lt;/h3&gt;

&lt;p&gt;This is particularly annoying, because I basically start spending time on trying to figure out what color could be the best suit for a background or a text, up until i find one that pleased me off.&lt;/p&gt;

&lt;p&gt;Unless you have a color palette already set up for you app design, a very simple trick that i usually follow to not fall into the trap of colors picking is &lt;strong&gt;starting with grayscale colors&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When i don't know what colors to choose for a particular element,  i just fallback on some shade of gray. &lt;/p&gt;

&lt;p&gt;Later on when my feature will have all the components that it needs, i could start enhancing it with a specific color already in mind (hopefully).&lt;/p&gt;

&lt;h3&gt;
  
  
  Implementing interactivity
&lt;/h3&gt;

&lt;p&gt;This means starting implementing early on the interactivity parts of a feature, things like button handlers, scrolling effects, form submit, etc.. &lt;/p&gt;

&lt;p&gt;These are very time consuming tasks which often requires to implement some sort of state management pattern around or  some sophisticated algorithms for implementing things like parallax effect.. &lt;/p&gt;

&lt;p&gt;Not to mention that these are the main source of bugs when it comes to developing an UI.&lt;/p&gt;

&lt;p&gt;The trick here is to &lt;strong&gt;implement first a static mockup of your feature&lt;/strong&gt; and, only later on, start to adding all the interactivity parts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Focusing on edge cases
&lt;/h3&gt;

&lt;p&gt;This means to start thinking about particular edge cases that could affect your feature. &lt;/p&gt;

&lt;p&gt;Something like:&lt;br&gt;
&lt;em&gt;How should the design looks like if the search has no results or if it generate too many results ?&lt;/em&gt;&lt;br&gt;
&lt;em&gt;What if a particular hotel has all rooms already reserved ? Should i display a disabled Book button or don't show it at all ?&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;These are important decision making situations which you often experience only when you start diving into the various scenarios of the features you are taking on.&lt;/p&gt;

&lt;p&gt;What i generally suggest in this cases is to simply &lt;strong&gt;annotate the edge cases&lt;/strong&gt; which you encounter while working on your feature and simply &lt;strong&gt;handle them later on&lt;/strong&gt;, when you'll have all the necessary informations to deal with them.&lt;/p&gt;

&lt;p&gt;So these were only just some of the common cases where I generally start to worry about details early on.&lt;br&gt;
The main takeaway here is to &lt;strong&gt;avoiding designing everything up front.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Usually i like to follow a more iterative approach where i continuously switch from a Design phase to an Implement phase.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8gqnp2gxwh87dbimimi8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8gqnp2gxwh87dbimimi8.png" alt="DesignCycles" width="800" height="567"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Essentially i start by designing a small piece of my feature and then implement it, then back to designing another piece and then implement it as well.&lt;/p&gt;

&lt;p&gt;I repeat this process iteratively until there are no more issues left to solve and i'm happy about the result that I achieved.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Split your features
&lt;/h2&gt;

&lt;p&gt;Whenever I start working on a big feature (such as a Chat system, for example), I usually divide the feature into several subtasks to which I assign 2 possible priorities&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Required&lt;/li&gt;
&lt;li&gt;Nice to have&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For instance, let's say that i'm working on a chat system. &lt;/p&gt;

&lt;p&gt;The required functionalities of this chat are essentially:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the area to display the chat messages&lt;/li&gt;
&lt;li&gt;the textarea to type the message&lt;/li&gt;
&lt;li&gt;the button for sending the message&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4xig4xjz94zal2gbjnin.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4xig4xjz94zal2gbjnin.png" alt="Chat" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But at some point i start realizing i'd like the users to be able to send images or videos  inside this chat, so i decide to include also an attachments section in my Chat required functionalities.&lt;/p&gt;

&lt;p&gt;I got deep into the implementation of this functionality only to discover later on that supporting attachments is going to be a lot more work than i've anticipated &lt;/p&gt;

&lt;p&gt;In fact i'll need for example to manage all the process of a uploading a file, which can be not so easy to implement.&lt;/p&gt;

&lt;p&gt;Now, If I was working on other tasks in the meantime and suddenly discover that one of those task require an higher priority rather than my chat system, i soon realize that i won't be able to ship my chat on production due the lack of this attachment functionality which is currently not completed.&lt;/p&gt;

&lt;p&gt;So I went from being able to get a simple working chat ready to use, to not having a chat at all due to a core functionality missing (the attachment part).&lt;/p&gt;

&lt;p&gt;As rule of thumb, to avoid these type of situations you need to &lt;strong&gt;always design the easiest version you are able to ship&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If part of a feature could be considered as a “nice-to-have” functionality then it could be designed and implemented later on. &lt;/p&gt;

&lt;p&gt;In this case the attachment functionality can be safely marked as a "nice-to-have: functionality, so it may be added in a future version of the chat system.&lt;/p&gt;

&lt;p&gt;Following this approach, can also increase your productivity, because you will be able to ship more basic features rather than 1 or 2 complex features at the time.&lt;/p&gt;

&lt;p&gt;So here it’s important to remember to always design and implement first the &lt;strong&gt;easiest version possible of your feature&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusions
&lt;/h2&gt;

&lt;p&gt;So that's it! These were my top 3 tips that i wanted to share here today with you.&lt;/p&gt;

&lt;p&gt;One last thing that i'd like to add is that the main ideas around the concepts that we have been discussing so far, is that they can be safely applied to other fields of software development or Software Engineering in general.&lt;/p&gt;

&lt;p&gt;Whether you are a backend developer, a solution architect a designer or whatever, i'm sure that if you'll be able to apply those simple rules in your day to day job, your work will come much much easier.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>design</category>
      <category>ux</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How i build a modern full stack application | 2022 Edition</title>
      <dc:creator>Gionatha</dc:creator>
      <pubDate>Thu, 01 Dec 2022 21:59:15 +0000</pubDate>
      <link>https://forem.com/gionatha/how-i-build-a-modern-full-stack-application-2022-edition-26kj</link>
      <guid>https://forem.com/gionatha/how-i-build-a-modern-full-stack-application-2022-edition-26kj</guid>
      <description>&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Development workflow&lt;/li&gt;
&lt;li&gt;Nextjs&lt;/li&gt;
&lt;li&gt;Typescript support&lt;/li&gt;
&lt;li&gt;Nextjs as a Frontend Framework&lt;/li&gt;
&lt;li&gt;Chakra UI&lt;/li&gt;
&lt;li&gt;Nextjs as a Backend framework&lt;/li&gt;
&lt;li&gt;tRPC&lt;/li&gt;
&lt;li&gt;Data Persistence&lt;/li&gt;
&lt;li&gt;Prisma&lt;/li&gt;
&lt;li&gt;NextAuth&lt;/li&gt;
&lt;li&gt;
Deployments

&lt;ol&gt;
&lt;li&gt;Vercel&lt;/li&gt;
&lt;li&gt;Planetscale&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;

Monitoring

&lt;ol&gt;
&lt;li&gt;Sentry&lt;/li&gt;
&lt;li&gt;Google Analitycs&lt;/li&gt;
&lt;li&gt;SplitBee&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;

Marketing

&lt;ol&gt;
&lt;li&gt;Product Hunt&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;Conclusions&lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;In this post i will talk about the modern web technologies i personally used for building and deploy a modern full stack application.&lt;/p&gt;




&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/e_VA7-fhakI"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Hi, my name is Gionatha and i'm the founder of &lt;strong&gt;Featbacks&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Featbacks is an open platform where you and your audience can discuss about different aspects of your side projects.&lt;/p&gt;

&lt;p&gt;If you are searching for a free platform for collecting or sharing ideas, questions, announcements, reporting issues about your side projects, Featbacks is the right place to do it. &lt;/p&gt;

&lt;p&gt;So be sure to give it a try at &lt;a href="https://featbacks.com" rel="noopener noreferrer"&gt;featbacks.com&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Development workflow
&lt;/h2&gt;

&lt;p&gt;First off i want to talk about my development workflow, which i follow when i'm building a full stack application &lt;strong&gt;in solo&lt;/strong&gt;..so without the collaboration of other people or a being in a team.&lt;/p&gt;

&lt;h3&gt;
  
  
  Starting with the frontend 👀...
&lt;/h3&gt;

&lt;p&gt;I usually i start by building the &lt;strong&gt;visual part&lt;/strong&gt; of the application i want to create, which is often called &lt;strong&gt;UI&lt;/strong&gt; or Frontend.&lt;/p&gt;

&lt;p&gt;Starting from the frontend, helps me to better define all the requirements that the application needs. &lt;/p&gt;

&lt;p&gt;In this way i'm assuring that all the data that the frontend need to display to the end user, will be stored on the backend as well.&lt;/p&gt;

&lt;h3&gt;
  
  
  ...then the backend 🚀
&lt;/h3&gt;

&lt;p&gt;Once i've built a mocked version of my application i can start working on the backend system of the application. &lt;/p&gt;

&lt;p&gt;The backend is like the &lt;strong&gt;engine&lt;/strong&gt; of the application itself, so it contains all the business logic for handling multiple events.. &lt;br&gt;
In terms of Featbacks this means the process of creating a project, creating a discussion, voting a reply, reply to a discussion, etc..&lt;/p&gt;

&lt;p&gt;Building the backend generally means dealing with data persistence into database, manage users authentication, check user permissions, manage error reporting and so on.&lt;/p&gt;

&lt;p&gt;So it's fair big world! 🌍&lt;/p&gt;


&lt;h2&gt;
  
  
  Nextjs
&lt;/h2&gt;

&lt;p&gt;Since i use &lt;strong&gt;React&lt;/strong&gt; and &lt;strong&gt;Typescript&lt;/strong&gt; for building my applications, i tend to choose &lt;strong&gt;NextJS&lt;/strong&gt; for building both my front and backend system.&lt;/p&gt;

&lt;p&gt;In my opinion Nextjs is one of the best framework available nowadays for building new React-based application from scratch.&lt;/p&gt;
&lt;h3&gt;
  
  
  Typescript support
&lt;/h3&gt;

&lt;p&gt;For example Nextjs supports Typescript, so it comes without the need to configure Typescript completely from scratch. &lt;/p&gt;

&lt;p&gt;And this is awesome, because i always work with typescript in all my projects, because it permits me to have a type-safety approach while i'm coding &lt;/p&gt;

&lt;p&gt;Using typescript permits to unlock the full power of the code editor that i'm using (VSCode). &lt;br&gt;
I'm talking about Intellisense support, code completion hints, error detection at static time and much more..&lt;/p&gt;

&lt;p&gt;This crucial for me, because it boost my productivity.&lt;/p&gt;

&lt;p&gt;Eventually i know that i will be at least 2 times faster using typescript rather than not using it. &lt;/p&gt;

&lt;p&gt;So my advice is to always use typescript for your personal projects.&lt;/p&gt;


&lt;h2&gt;
  
  
  NextJs as a Frontend framework
&lt;/h2&gt;

&lt;p&gt;Other cool features that Nextjs brings when it comes to frontend development are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;a &lt;strong&gt;File system based Routing:&lt;/strong&gt; Nextjs has this directory called &lt;code&gt;pages&lt;/code&gt; where the files inside are turned into web pages available from our application. So creating a new page it's very easy and straightforward.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Multiple Data Fetching methods:&lt;/strong&gt; Nextjs provide different method to render a specific pages, for example we can choose to &lt;code&gt;server side rendering&lt;/code&gt; the page or generate a static version of that page that will consequently be cached inside a &lt;code&gt;CDN&lt;/code&gt; or even decide to just &lt;code&gt;client side rendering&lt;/code&gt; the page if for example the SEO is not relevant and the page content tend to change frequently&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;NextJs has also an integrated compiler called &lt;strong&gt;SWC&lt;/strong&gt; that automatically transform and minify our code for production. So we won't need to install and configure third party tools such as Babel for example&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So these were the main features of NextJs when it comes to frontend development, but of course it comes out with many others feature as well like: Fast-Refresh, Image Optimization, support for internatinalization and many more...&lt;/p&gt;


&lt;h2&gt;
  
  
  ChakraUI
&lt;/h2&gt;

&lt;p&gt;Since most of the time i work in solo, i usually use React component based library, because it saves me from the problem of implementing most the most common ui components from scratch (such as menu, dialogs, buttons, layouts, tooltips, etc..)&lt;/p&gt;

&lt;p&gt;One of my favourite library, which i also used for developing Featbacks is &lt;strong&gt;ChakraUI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The reason why i choose ChakraUI it's because it's very easy to use and especially it's easy to customize.&lt;/p&gt;

&lt;p&gt;In fact all the components that Chakra provides can be easily customized thanks to the &lt;code&gt;style props&lt;/code&gt; feature. &lt;/p&gt;

&lt;p&gt;Essentially given a specific component such as a Text, you can add your own style to that component by specifying the attributes you want to customize.&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="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Text&lt;/span&gt;
     &lt;span class="nx"&gt;ml&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
     &lt;span class="nx"&gt;textTransform&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;uppercase&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
     &lt;span class="nx"&gt;fontSize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sm&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
     &lt;span class="nx"&gt;fontWeight&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bold&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
     &lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pink.800&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; 
  &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
     &lt;span class="nx"&gt;Verified&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;bull&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;Cape&lt;/span&gt; &lt;span class="nx"&gt;Town&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Text&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In addition to this, all the components that Chakra provides are already wrapped up with all the accessibility attributes that every component should have, so you won't need to think about this.&lt;/p&gt;

&lt;p&gt;So my final thought is that React component libraries are particularly useful especially if you don't need an highly specific design system for your UI.&lt;/p&gt;




&lt;h2&gt;
  
  
  NextJS as a Backend framework
&lt;/h2&gt;

&lt;p&gt;As i said before, NextJs can also be used as a backend framework, thanks to one of the coolest feature i've seen in a while in a framework, called &lt;strong&gt;API Routes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;API routes essentially are REST endpoints that are exposed directly from the underline Nextjs server. &lt;/p&gt;

&lt;p&gt;So you can basically write your own API without creating a new dedicated backend application such as a NodeJS Express application that you have to build from scratch.&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;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;John Doe&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And this is awesome, because you will get also the benefit of being able to share code between the frontend and the backend  like models or functions. &lt;/p&gt;

&lt;p&gt;And this believe me saves me sooo much time, because you will be able also to deploy your frontend and backend as single instance of Nextjs application.&lt;/p&gt;




&lt;h2&gt;
  
  
  tRPC
&lt;/h2&gt;

&lt;p&gt;One library that comes in handy when building a backend system, especially using Nextjs Api Routes is &lt;strong&gt;tRPC&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;tRPC allows you to easily build &amp;amp; consume fully typesafe APIs without schemas or code generation.&lt;/p&gt;

&lt;p&gt;All that this library does is wrapping your Nextjs project and particularly the API functions that you write, and automatically generate some react hooks or a client that you can use within your react components or inside the data fetching methods that we have mention before. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And everything comes out with fully typescript support&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;So if you change something on your Api functions, your changes will be immediately reflected on your frontend, without relying on some third party tools to generate api contracts for example.&lt;/p&gt;

&lt;p&gt;This let me say it's AMAZING! The time that this library saves me as solo developer is invaluable.&lt;/p&gt;

&lt;p&gt;tRPC has also different adapters for most of the modern popular framework, so it doesn’t rely specifically on React or NextJS.&lt;/p&gt;




&lt;h2&gt;
  
  
  Data persistence
&lt;/h2&gt;

&lt;p&gt;When it comes to backend development we cannot talk about data persistence and especially &lt;strong&gt;databases&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;There are different ways to store our data regarding on our use cases.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;We have relational databases or &lt;strong&gt;SQL&lt;/strong&gt; databases, such as MySQL or Postgres&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We have NON relational database or &lt;strong&gt;NO-SQL&lt;/strong&gt; databases, such as MongoDB&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;And we also have &lt;strong&gt;Key-Value&lt;/strong&gt; store databases, such as Redis.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Obviously each of those paradigm have their own pros and cons and their own specific use cases. &lt;/p&gt;

&lt;p&gt;One will perform better than another regarding what we need to deal with.&lt;/p&gt;

&lt;p&gt;I'm not going to dwell on this topic because it's very broad and there are plenty of informations about it.&lt;/p&gt;

&lt;p&gt;What i can tell you is that while developing Featbacks i need to store mainly relational data such as users, projects, discussions, replies, votes and to do so i used a &lt;strong&gt;MySQL&lt;/strong&gt; database. &lt;/p&gt;




&lt;h2&gt;
  
  
  Prisma
&lt;/h2&gt;

&lt;p&gt;One of the most useful library that i came across when dealing with databases was &lt;strong&gt;Prisma&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Prisma is a &lt;strong&gt;next-generation typescript ORM&lt;/strong&gt;, that make easy working with databases.&lt;/p&gt;

&lt;p&gt;The workflow of Prisma is very easy to understand:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You start by defining a schema using the Prisma syntax. In this schema you will define all of your application domain models and relations between them.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;model&lt;/span&gt; &lt;span class="nx"&gt;Post&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;id&lt;/span&gt;         &lt;span class="nx"&gt;Int&lt;/span&gt;        &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;id&lt;/span&gt; &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;default&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;autoincrement&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
  &lt;span class="nx"&gt;createdAt&lt;/span&gt;  &lt;span class="nx"&gt;DateTime&lt;/span&gt;   &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;default&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
  &lt;span class="nx"&gt;title&lt;/span&gt;      &lt;span class="nb"&gt;String&lt;/span&gt;
  &lt;span class="nx"&gt;published&lt;/span&gt;  &lt;span class="nb"&gt;Boolean&lt;/span&gt;    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;default&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="nx"&gt;categories&lt;/span&gt; &lt;span class="nx"&gt;Category&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;relation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;references&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
  &lt;span class="nx"&gt;author&lt;/span&gt;     &lt;span class="nx"&gt;User&lt;/span&gt;       &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;relation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fields&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;authorId&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nx"&gt;references&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
  &lt;span class="nx"&gt;authorId&lt;/span&gt;   &lt;span class="nx"&gt;Int&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;From this schema you can then run the &lt;code&gt;prisma client&lt;/code&gt; that will automatically generate all the type-safety models of your application and it will also generate a query builder client from which you can run your database operations.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Find the first user that contains Ada&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userByName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;prisma&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findFirst&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;where&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;contains&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ada&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In addition to this prisma provides also a tool called &lt;code&gt;prisma migrate&lt;/code&gt; that basically read your schema and generate a migration script that can be applied to your development or production database&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Finally it also provide a nice user interface called &lt;code&gt;prisma studio&lt;/code&gt; to view and edit your database data.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Obviously Prisma has different adapters both for both SQL e NOSQL databases so it's the perfect fit for the majority of the databases available out there.&lt;/p&gt;




&lt;h2&gt;
  
  
  NextAuth
&lt;/h2&gt;

&lt;p&gt;One common piece of a backend system usually is dealing with authentication.&lt;/p&gt;

&lt;p&gt;Authentication means having a system that permit users to sign in or sign out from the application itself and also figure out who is trying to do a particular action like creating a discussion or voting a reply (this latter part is often called authorization)&lt;/p&gt;

&lt;p&gt;Fortunately there is a library called &lt;strong&gt;NextAuth&lt;/strong&gt;, which is an &lt;strong&gt;open source authentication solution built exclusively for Nextjs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Some key points about NextAuth are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;is designed to work with any Oauth Service (like Google, Github, Microsoft, Twitter and so on)&lt;/li&gt;
&lt;li&gt;Supports email with passwordless authentication&lt;/li&gt;
&lt;li&gt;Supports both JSON Web Tokens and database sessions&lt;/li&gt;
&lt;li&gt;is designed for Serverless environment ( Nextjs Api functions, AWS Lambda, Docker, Heroku, etc…)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;NextAuth can be used with or without a database. For example in Featbacks i choose to store the user sessions inside a dedicated database table.&lt;/p&gt;

&lt;p&gt;The great thing about NextAuth is that it comes out with an adapter for Prisma. &lt;br&gt;
So once you've configured NextAuth with your Prisma instance you'll have a database authentication system ready to go. &lt;/p&gt;

&lt;p&gt;From there you will need only to set up your authentication methods like email and password or third party oauth services like google or github and Nextauth will take care of the rest.&lt;/p&gt;




&lt;h2&gt;
  
  
  Deployments
&lt;/h2&gt;

&lt;p&gt;When it comes to deployments there's a ton of cloud based services that could be used to achieve what we are trying to do here.&lt;/p&gt;

&lt;p&gt;In my case what i needed was to deploy both my frontend and backend system along with my database instance.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vercel
&lt;/h3&gt;

&lt;p&gt;Since i used NextJS, one of the easiest way to deploy a NextJS application is to use the &lt;strong&gt;Vercel&lt;/strong&gt; platform.&lt;/p&gt;

&lt;p&gt;Vercel is the company that developed NextJS and they also developed a platform that permit to deploy a Nextjs application (but even other popular frameworks different from Nextjs) in a very straightforward and easy way.&lt;/p&gt;

&lt;p&gt;Essentially what they need is the access to the github project that you want to deploy, in order to set some CICD pipelines.&lt;/p&gt;

&lt;p&gt;From there, each time you push something on your main branch it will trigger a new build of your application and therefore your app will be automatically deployed on their server.&lt;/p&gt;

&lt;p&gt;This remove the needs of having a person that manage this kind of tasks (they are often called DevOps engineer). &lt;/p&gt;

&lt;h3&gt;
  
  
  Planetscale
&lt;/h3&gt;

&lt;p&gt;Of course we need also to deploy our database in some way.&lt;/p&gt;

&lt;p&gt;When it comes to Featbacks, my option fell on &lt;strong&gt;PlanetScale&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Planetscale is a &lt;strong&gt;serverless database platform, built on top of MySQL and Vitess&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Vitess is a &lt;strong&gt;clustering system for horizontal scaling a MySQL database&lt;/strong&gt;. Essentially Vitess automatically scale your MySQL database by using a technique called sharding.&lt;/p&gt;

&lt;p&gt;Sharding consist in splitting the data inside your database into multiple database instances in order to avoid to overload a single or a few database instances.&lt;/p&gt;

&lt;p&gt;Planetscale is also very easy to integrate with Prisma and Nextjs and there are plenty of examples that shows you how to setup it with this latter technologies, so i think it's one of the best pick available out there, if you are looking for a MySql database instance.&lt;/p&gt;




&lt;h2&gt;
  
  
  Monitoring
&lt;/h2&gt;

&lt;p&gt;After you have launched a first version of your application, it's very important to have something that permits you to monitor your application.&lt;/p&gt;

&lt;p&gt;The most important aspects to monitor are, in my opinion:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Error detection or crash reporting &lt;/li&gt;
&lt;li&gt;Tracking user engagement&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Sentry
&lt;/h3&gt;

&lt;p&gt;When it comes to acknowledge if something went wrong in your application, one of the best tool that i came across is &lt;strong&gt;Sentry&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Sentry is a &lt;strong&gt;crash reporting platform that provides you with real-time insight into production deployments with info to reproduce and fix crashes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It notifies you of exceptions or errors that your users run into while using your app, and organizes them for you on a web dashboard. &lt;/p&gt;

&lt;p&gt;Reported exceptions include stacktraces, device info, version, and other relevant context automatically; you can also provide additional context that is specific to your application, like the current route or user id.&lt;/p&gt;

&lt;p&gt;One of the most cool feature that i found in Sentry is that it permits to &lt;strong&gt;send you a notification via email or even via a Slack notification message&lt;/strong&gt; when a new error occur or if some other criteria are met.&lt;/p&gt;

&lt;p&gt;And this is awesome because you will immediately know if something is going wrong in your app.&lt;/p&gt;

&lt;h3&gt;
  
  
  Google Analytics
&lt;/h3&gt;

&lt;p&gt;When it comes to tracking metrics such as daily users, new users, average session duration, page views, events or conversions, one the best free tool available is &lt;strong&gt;Google Analytics&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Google Analytics helps you collect all of these user engagement metrics that gives you insight  about the application user experience.&lt;/p&gt;

&lt;p&gt;So in this way you can understand what part of your application is more used and which one are less used.&lt;/p&gt;

&lt;p&gt;Tracking these metrics will also help you to better understand what parts of your application need improvements or if there is like a particularly critical section of your app.&lt;/p&gt;

&lt;p&gt;The main advantage of Google Analytics is that is completely free, but i don’t quite like the user interface, because i don't find it very intuitive.&lt;/p&gt;

&lt;p&gt;But apart from that it does the job pretty well, and it is also very easy to setup into NextJs.&lt;/p&gt;

&lt;h3&gt;
  
  
  An alternative to Google Analytics: SplitBee
&lt;/h3&gt;

&lt;p&gt;I also came across with an other platform for collecting analytics called &lt;strong&gt;SplitBee&lt;/strong&gt; and their user interface is &lt;strong&gt;insanely good and intuitive&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Since Splitbee is a Freemium product, i eventually decided to opt in for Google Analytics, but in the future i would like to migrate to Splitbee because as i said their UI is so simple and clean rather than Google Analytics.&lt;/p&gt;




&lt;h2&gt;
  
  
  Marketing
&lt;/h2&gt;

&lt;p&gt;In the final part of this long post, i wanna briefly talk about another important aspect of launching an application such as Featbacks, and that's &lt;strong&gt;Marketing&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Product Hunt
&lt;/h3&gt;

&lt;p&gt;Although i'm not an expert in marketing, i found a very good platform for sponsoring your app that is called &lt;strong&gt;Product Hunt&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Product Hunt is &lt;strong&gt;an online platform to share and discovering new tech products&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The app is both for the creators whose come here to launch their products, and for consumers that come to find the latest and greatest products in tech.&lt;/p&gt;

&lt;p&gt;The best part about Product Hunt is the community element. &lt;/p&gt;

&lt;p&gt;On the homepage, new products get ranked by their popularity. This popularity is determined by the upvotes from fellow community members. &lt;br&gt;
If you like a product, you upvote it, simple as. &lt;br&gt;
The more upvotes a product has, the higher on the homepage it sits.&lt;/p&gt;




&lt;h3&gt;
  
  
  Conclusions
&lt;/h3&gt;

&lt;p&gt;Alright we've just arrived at the end of this long post.&lt;/p&gt;

&lt;p&gt;I hope that sharing my experience and insight about building a modern full stack application such as Featbacks in 2022, might have help you learn something that you were unaware of.&lt;/p&gt;

&lt;p&gt;Let me know if you are using any of these technologies for building your personal projects, or if you're using something that i've not mentioned.&lt;/p&gt;

&lt;p&gt;Cheers 🍻&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>architecture</category>
      <category>design</category>
      <category>tooling</category>
    </item>
    <item>
      <title>I built a platform for collecting feedbacks</title>
      <dc:creator>Gionatha</dc:creator>
      <pubDate>Wed, 16 Nov 2022 13:49:13 +0000</pubDate>
      <link>https://forem.com/gionatha/i-built-a-platform-for-collecting-feedbacks-49m3</link>
      <guid>https://forem.com/gionatha/i-built-a-platform-for-collecting-feedbacks-49m3</guid>
      <description>&lt;p&gt;Hi everyone, my name is Gionatha and today i would like to present and show you a new app that i built called &lt;a href="https://featbacks.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Featbacks&lt;/strong&gt;&lt;/a&gt;👂&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Featbacks&lt;/strong&gt; is an open platform that permits to &lt;strong&gt;collect, share and talk&lt;/strong&gt; about different aspects of a product that you own, &lt;strong&gt;directly with your audience&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/2ZNDmcSLDnw"&gt;
&lt;/iframe&gt;
&lt;/p&gt;




&lt;p&gt;So if you have any kind of product like an online application, a website, a school project, YouTube channel or whatever it might be, with Featbacks &lt;strong&gt;you can create a shared space called project&lt;/strong&gt;, where you and your audience are able to talk about &lt;strong&gt;&lt;em&gt;ideas, features, questions, give announcements reporting problems&lt;/em&gt;&lt;/strong&gt; or just share thoughts about your product.&lt;/p&gt;




&lt;p&gt;I created &lt;strong&gt;Featbacks&lt;/strong&gt; mainly because i was looking for an online platform that will permit me to collect feedbacks about some of my personal projects &lt;strong&gt;without incurring into expensive cost&lt;/strong&gt;… but many of the platforms i found were not 100% free.&lt;/p&gt;

&lt;p&gt;So i decided to build one on my own, &lt;strong&gt;free to use&lt;/strong&gt;&lt;br&gt;
Be sure to check out the app at &lt;a href="https://featbacks.com" rel="noopener noreferrer"&gt;featbacks.com&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Thanks for your time, i hope you will find the application useful.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>news</category>
      <category>showdev</category>
      <category>startup</category>
    </item>
    <item>
      <title>How to create a Twitch Chat Clone with React and Socket.io</title>
      <dc:creator>Gionatha</dc:creator>
      <pubDate>Sat, 24 Sep 2022 15:45:35 +0000</pubDate>
      <link>https://forem.com/gionatha/build-a-twitch-chat-clone-with-react-tailwindcss-and-socketio-4423</link>
      <guid>https://forem.com/gionatha/build-a-twitch-chat-clone-with-react-tailwindcss-and-socketio-4423</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/U2XnoKzxmeY"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>react</category>
      <category>tutorial</category>
      <category>tailwindcss</category>
      <category>design</category>
    </item>
    <item>
      <title>Best resources for preparing a Frontend Interview in 2022 👨🏻‍💻🙋🏼‍♀️ (No W3Schools)</title>
      <dc:creator>Gionatha</dc:creator>
      <pubDate>Mon, 12 Sep 2022 20:41:47 +0000</pubDate>
      <link>https://forem.com/gionatha/best-resources-for-preparing-a-frontend-interview-in-2022-no-w3schools-2bge</link>
      <guid>https://forem.com/gionatha/best-resources-for-preparing-a-frontend-interview-in-2022-no-w3schools-2bge</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Would you like to start preparing yourself for a frontend interview, but you don't know what are the best resources to learn from ?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Well today, i will list you the best online resources that i actually used for preparing myself. Let's start!&lt;/p&gt;

&lt;h2&gt;
  
  
  Javascript
&lt;/h2&gt;

&lt;p&gt;Javascript is usually &lt;strong&gt;one of the most important topic&lt;/strong&gt; during a Frontend Interview, because it is generally subject of trivia questions but also for small coding problems, so you need to master it both theoretically and practically.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Here i suggest you &lt;a href="//javascript.info"&gt;javascript.info&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It's the simplest and detailed explanation of javascript that i ever found! &lt;br&gt;
It's divided in &lt;strong&gt;3 sections&lt;/strong&gt;: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The javascript language&lt;/strong&gt; (&lt;em&gt;variables, functions, loop, conditionals ,etc.&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The browser&lt;/strong&gt; (&lt;em&gt;HTML DOM, Events, Resource Loading&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Miscellaneous&lt;/strong&gt; (&lt;em&gt;LocalStorage, Session Storage, Cookies, Network Request, CORS&lt;/em&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  HTML &amp;amp; CSS
&lt;/h2&gt;

&lt;p&gt;This is also a very important topic because the foundation of Frontend Development (especially web development) rely on HTML and CSS. &lt;br&gt;
Needles to say that &lt;strong&gt;most of the trivia questions and  practice tests rely on the knowledge of the latter&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Here the best resources that i found are provided by &lt;a href="https://developer.mozilla.org/en-US/"&gt;MDN&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Learn/HTML"&gt;HTML&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Learn/CSS"&gt;CSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Learn/Accessibility"&gt;Accessibility&lt;/a&gt; &lt;strong&gt;This is very important too!&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Interview Question and Answers
&lt;/h2&gt;

&lt;p&gt;Once you have mastered the basics of Frontend/Web Development, it's time to test your knowledge with some common interview question.&lt;/p&gt;

&lt;p&gt;Here i have multiple resources to suggest you:&lt;/p&gt;

&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://30secondsofinterviews.org/"&gt;30 Seconds of Interview&lt;/a&gt; (very friendly application, it cover all the various topics questions with answers too!)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.frontendinterviewhandbook.com/html-questions/"&gt;HTML Questions &amp;amp; Answers
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.frontendinterviewhandbook.com/css-questions/"&gt;CSS Questions &amp;amp; Answers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.frontendinterviewhandbook.com/javascript-questions/"&gt;Javascript Questions &amp;amp; Answers&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Bonus: General Questions
&lt;/h2&gt;

&lt;p&gt;Generally interviews begin with few questions about yourself: &lt;strong&gt;who you are, what experiences you have made, what are your strengths and weaknesses and so on&lt;/strong&gt;. &lt;br&gt;
So it's better to be prepared also to this type of questions.&lt;/p&gt;

&lt;p&gt;Here some resources containing common questions with attached an explanation of possible answers that you can give back:&lt;/p&gt;

&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://hbr.org/2021/11/10-common-job-interview-questions-and-how-to-answer-them"&gt;Top 10 Common Job Interview Questions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.apollotechnical.com/interview-questions-to-ask-software-engineer/"&gt;17 Top Interview Questions for Software Engineer &lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Wait! Where are (React/Angular/Vue/Svelte) resources ?
&lt;/h2&gt;

&lt;p&gt;Well here it depends on the actual framework or library the company you are applying for is using.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generally the official docs of these client side framework cover all you need to know!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I mainly use React, so i can suggest some React Resources that i used to cover this topic:&lt;/p&gt;

&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://beta.reactjs.org/"&gt;React Docs Beta&lt;/a&gt; (i think this has been written by Dan Abramov, but i'm not sure!)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.interviewbit.com/react-interview-questions/"&gt;React Interview Questions&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;




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

&lt;p&gt;Well, this is what i've to share. I hope you find these resources helpful, at least they have been for me!&lt;/p&gt;

&lt;p&gt;I know that are tons of other useful resources scattered around the web, but as i said these are the ones that i personally used.&lt;/p&gt;

&lt;p&gt;Let me know in the comment what resources have you used to prepare yourself for a Frontend Interview. See ya!&lt;/p&gt;

</description>
      <category>career</category>
      <category>webdev</category>
      <category>programming</category>
      <category>interview</category>
    </item>
    <item>
      <title>How to create a drag and droppable Kanban Board with React and Chakra UI</title>
      <dc:creator>Gionatha</dc:creator>
      <pubDate>Wed, 31 Aug 2022 09:13:57 +0000</pubDate>
      <link>https://forem.com/gionatha/how-to-create-a-drag-and-droppable-kanban-board-with-react-and-chakra-ui-1meb</link>
      <guid>https://forem.com/gionatha/how-to-create-a-drag-and-droppable-kanban-board-with-react-and-chakra-ui-1meb</guid>
      <description>&lt;p&gt;Hello folks! Today i want to show you how to build a modern drag and droppable Kanban Board using React.&lt;/p&gt;

&lt;p&gt;The stack that we are going to use will consist of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vite (for creating the project)&lt;/li&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Chakra UI (a component library build for React)&lt;/li&gt;
&lt;li&gt;React DnD (a Drag and Drop library made for React)&lt;/li&gt;
&lt;li&gt;React TextArea Autosize (a TextArea component that grows when the content inside increase)&lt;/li&gt;
&lt;li&gt;other utilities libraries (useHook-ts, lodash, uuid, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hope you enjoy!&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/9MKFnOKmihE"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>react</category>
      <category>tutorial</category>
      <category>showdev</category>
      <category>design</category>
    </item>
    <item>
      <title>How to create a Speed Typing app with React, TailwindCSS and Framer Motion</title>
      <dc:creator>Gionatha</dc:creator>
      <pubDate>Wed, 03 Aug 2022 12:55:00 +0000</pubDate>
      <link>https://forem.com/gionatha/how-to-create-a-speed-typing-app-with-react-tailwindcss-and-framer-motion-1kb8</link>
      <guid>https://forem.com/gionatha/how-to-create-a-speed-typing-app-with-react-tailwindcss-and-framer-motion-1kb8</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/oc7BMlIU3VY"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>react</category>
      <category>tailwindcss</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
