<?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: Garrone Joseph</title>
    <description>The latest articles on Forem by Garrone Joseph (@garronej).</description>
    <link>https://forem.com/garronej</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%2F366930%2F91bdc7b8-35d6-43df-933d-e03f709633df.png</url>
      <title>Forem: Garrone Joseph</title>
      <link>https://forem.com/garronej</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/garronej"/>
    <language>en</language>
    <item>
      <title>What do I expect from my i18n library</title>
      <dc:creator>Garrone Joseph</dc:creator>
      <pubDate>Wed, 08 Jun 2022 02:11:03 +0000</pubDate>
      <link>https://forem.com/garronej/type-safe-react-i18n-1hp1</link>
      <guid>https://forem.com/garronej/type-safe-react-i18n-1hp1</guid>
      <description>&lt;ul&gt;
&lt;li&gt;  I want &lt;strong&gt;true type-safety&lt;/strong&gt;, If I forgot something I want to be warned about it at &lt;strong&gt;compile time&lt;/strong&gt;. I want to be guided by intelisence
    through and through so I can focus on my content.&lt;/li&gt;
&lt;li&gt;  I want to be able to &lt;strong&gt;explicitly fallback to English&lt;/strong&gt; when I can't translate myself.&lt;/li&gt;
&lt;li&gt;  I want it to be &lt;strong&gt;easy for non-tech peoples&lt;/strong&gt; to provide missing translations.&lt;/li&gt;
&lt;li&gt;  I want to be able to &lt;a href="https://github.com/garronej/i18nifty/blob/216d90bfa80741c2dc39b79ff7965d18af0bc258/src/test/apps/spa/src/i18n.tsx#L35-L40"&gt;use React components&lt;/a&gt; and &lt;a href="https://github.com/garronej/i18nifty/blob/216d90bfa80741c2dc39b79ff7965d18af0bc258/src/test/apps/spa/src/i18n.tsx#L45-L53"&gt;involve JS logic&lt;/a&gt; in my translations.&lt;/li&gt;
&lt;li&gt;  I want the language to &lt;strong&gt;default to the browser preference&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;  I want the language preferences to be &lt;strong&gt;persistant across reloads&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;SEO&lt;/strong&gt;: I want to let Google know that my website is available in multiple language.&lt;/li&gt;
&lt;li&gt;  I want all this to work with &lt;strong&gt;server side rendering&lt;/strong&gt; (if I need to).&lt;/li&gt;
&lt;li&gt;  I want to be able to change the language of my app by adding &lt;code&gt;?lang=xx&lt;/code&gt; to the URL without involving my routing library.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I tried to create a library that checks all the boxes, I called it &lt;a href="https://www.i18nifty.dev"&gt;i18nifty&lt;/a&gt;.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3i3BqqIl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ovinck7q97cx8edfqze5.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3i3BqqIl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ovinck7q97cx8edfqze5.gif" alt="Image description" width="568" height="720"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>react</category>
      <category>nextjs</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Bundle environment variables in create-react-app at launch time (not build time)!</title>
      <dc:creator>Garrone Joseph</dc:creator>
      <pubDate>Sat, 19 Feb 2022 17:09:07 +0000</pubDate>
      <link>https://forem.com/garronej/bundle-environment-variables-in-create-react-app-at-launch-time-not-build-time-22gp</link>
      <guid>https://forem.com/garronej/bundle-environment-variables-in-create-react-app-at-launch-time-not-build-time-22gp</guid>
      <description>&lt;p&gt;
    &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F6702424%2F154800287-c8433ac4-26c1-43fb-9507-46cd0b6e751a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F6702424%2F154800287-c8433ac4-26c1-43fb-9507-46cd0b6e751a.png"&gt;&lt;/a&gt;  
&lt;/p&gt;

&lt;h2&gt;
  
  
  Motivation
&lt;/h2&gt;

&lt;p&gt;Create-react-app &lt;a href="https://create-react-app.dev/docs/adding-custom-environment-variables/" rel="noopener noreferrer"&gt;supports environment variable&lt;/a&gt; but they are bundled at build time when &lt;code&gt;yarn build&lt;/code&gt; is run.&lt;br&gt;&lt;br&gt;
If we want to change anything like the URL of the backend the app should connect to, we have to rebuild, we can't ship customizable Docker image of our CRA apps.  &lt;/p&gt;

&lt;p&gt;The solution would be to be able to do:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; docker run &lt;span class="nt"&gt;--env&lt;/span&gt; &lt;span class="nv"&gt;FOO&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"xyz"&lt;/span&gt; my-org/my-create-react-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then access &lt;code&gt;FOO&lt;/code&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the code like &lt;code&gt;process.env["FOO"]&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;In &lt;code&gt;public/index.html&lt;/code&gt; like &lt;code&gt;&amp;lt;title&amp;gt;%FOO%&amp;lt;/title&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/garronej/cra-envs" rel="noopener noreferrer"&gt;&lt;code&gt;cra-envs&lt;/code&gt;&lt;/a&gt; does just that, in a secure, performant and type safe way.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✅ No impact on the startup time.&lt;/li&gt;
&lt;li&gt;✅ No impact on the Docker image size.
&lt;/li&gt;
&lt;li&gt;✅ Require no network connection at container startups.&lt;/li&gt;
&lt;li&gt;✅ Secure: It only injects the envs declared in the &lt;code&gt;.env&lt;/code&gt; file.
&lt;/li&gt;
&lt;li&gt;✅ It works like you are already used to. It just changes &lt;strong&gt;when&lt;/strong&gt; the envs&lt;/li&gt;
&lt;li&gt;✅  EJS support in &lt;code&gt;public/index.html&lt;/code&gt; (&lt;a href="https://github.com/facebook/create-react-app/issues/3112#issuecomment-328829771" rel="noopener noreferrer"&gt;few peoples knows&lt;/a&gt;).
This enables for example to conditionally &lt;a href="https://github.com/garronej/cra-envs-demo-app/blob/e1aa8067b52a563bc5db18558e7ed7746a56c9c0/public/index.html#L6-L21" rel="noopener noreferrer"&gt;preload one font or another&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;✅ (Optional) Type safe: An env getter is generated so &lt;a href="https://user-images.githubusercontent.com/6702424/154802407-92d2d0b7-b74c-4b35-a2b5-5c27c26d5127.png" rel="noopener noreferrer"&gt;you know what envs are available&lt;/a&gt; are injected.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Usecase example
&lt;/h2&gt;

&lt;p&gt;
    &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F6702424%2F154810177-3da80638-93c3-4a41-9710-13541b9d8974.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F6702424%2F154810177-3da80638-93c3-4a41-9710-13541b9d8974.png"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/InseeFrLab/onyxia-web" rel="noopener noreferrer"&gt;Onyxia-web&lt;/a&gt; is a create-react-app distributed as a &lt;a href="https://hub.docker.com/r/inseefrlab/onyxia-web/tags" rel="noopener noreferrer"&gt;Docker image&lt;/a&gt;.  &lt;/p&gt;

&lt;p&gt;Sysadmins that would like to deploy Onyxia on their infrastructure can simply use&lt;br&gt;
&lt;a href="https://hub.docker.com/r/inseefrlab/onyxia-web/tags" rel="noopener noreferrer"&gt;the official Docker image&lt;/a&gt; and provide relevant environnement variable to adust the theme/branding of the website to their usecase.  &lt;/p&gt;

&lt;p&gt;Here are two deployment example:  &lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://datalab.sspcloud.fr" rel="noopener noreferrer"&gt;
    &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F6702424%2F154809580-b38abbc2-d7be-4fc2-ad7d-b830d88f3a57.png"&gt;  
  &lt;/a&gt;
  &lt;a href="https://garronej.dev" rel="noopener noreferrer"&gt;
    &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F6702424%2F154809578-4aaa5501-e356-484b-8a95-c2a59e287cf9.png"&gt;  
  &lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
        &lt;sup&gt;&lt;em&gt;Click on the social media preview to access the websites&lt;/em&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;h1&gt;
  
  
  Documentation
&lt;/h1&gt;

&lt;p&gt;This is the link to the repo: &lt;a href="https://github.com/garronej/cra-envs" rel="noopener noreferrer"&gt;https://github.com/garronej/cra-envs&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Find 👉&lt;a href="https://github.com/garronej/cra-envs-demo-app" rel="noopener noreferrer"&gt;&lt;strong&gt;here&lt;/strong&gt;&lt;/a&gt;👈 a demo setup of:&lt;br&gt;&lt;br&gt;
&lt;code&gt;cra-envs&lt;/code&gt; + &lt;code&gt;create-react-app&lt;/code&gt; + &lt;code&gt;TypeScript&lt;/code&gt; + &lt;code&gt;Nginx&lt;/code&gt; + &lt;code&gt;Docker&lt;/code&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>docker</category>
      <category>typescript</category>
      <category>nginx</category>
    </item>
    <item>
      <title>Use environment variables in create-react-app projects</title>
      <dc:creator>Garrone Joseph</dc:creator>
      <pubDate>Wed, 22 Dec 2021 05:36:39 +0000</pubDate>
      <link>https://forem.com/garronej/use-environment-variables-in-create-react-app-projects-78</link>
      <guid>https://forem.com/garronej/use-environment-variables-in-create-react-app-projects-78</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/garronej/cra-envs"&gt;cra-envs&lt;/a&gt; is a module that help you safely bundle server environment variables into statically served React SPA.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Motivation
&lt;/h2&gt;

&lt;p&gt;We want to be able to do &lt;code&gt;docker run --env FOO="xyz" my-org/my-create-react-app&lt;/code&gt; &lt;br&gt;
then access &lt;code&gt;FOO&lt;/code&gt; in the app like &lt;code&gt;process.env["FOO"]&lt;/code&gt;.  &lt;/p&gt;

&lt;p&gt;Create react app provides no official way to inject environment variable from the server into the page.&lt;br&gt;&lt;br&gt;
When you run &lt;code&gt;yarn build&lt;/code&gt; create react app does bundle all the variables prefixed by &lt;code&gt;REACT_APP_&lt;/code&gt;&lt;br&gt;
and expose them under &lt;code&gt;process.env&lt;/code&gt; (&lt;a href="https://create-react-app.dev/docs/adding-custom-environment-variables/"&gt;see here&lt;/a&gt;).&lt;br&gt;&lt;br&gt;
The problem, however, is that you likely don't want to build your app on the server.&lt;br&gt;&lt;br&gt;
For this use case the CRA team suggests to &lt;a href="https://create-react-app.dev/docs/title-and-meta-tags/#injecting-data-from-the-server-into-the-page"&gt;introduce placeholders&lt;/a&gt; in the &lt;code&gt;public/index.html&lt;/code&gt; &lt;br&gt;
and do the substitution on the server before serving the app. This solution involves a lot of hard to maintain scripting.&lt;/p&gt;

&lt;p&gt;This module abstract away the burden of managing environment variable injection as well as providing a type-safe way&lt;br&gt;
to access them in your code.&lt;/p&gt;

</description>
      <category>react</category>
      <category>docker</category>
      <category>typescript</category>
      <category>devops</category>
    </item>
    <item>
      <title>makeStyles is dead, long live makeStyles!</title>
      <dc:creator>Garrone Joseph</dc:creator>
      <pubDate>Mon, 11 Oct 2021 10:54:20 +0000</pubDate>
      <link>https://forem.com/garronej/makestyles-is-dead-long-live-makestyles-i67</link>
      <guid>https://forem.com/garronej/makestyles-is-dead-long-live-makestyles-i67</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JUrVm8VU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://user-images.githubusercontent.com/6702424/134704429-83b2760d-0b4d-42e8-9c9a-f287a3353c13.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JUrVm8VU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://user-images.githubusercontent.com/6702424/134704429-83b2760d-0b4d-42e8-9c9a-f287a3353c13.gif" alt="tss-react" width="480" height="657"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Material-ui decided to &lt;a href="https://github.com/mui-org/material-ui/issues/26571#issuecomment-878641387"&gt;deprecate the hook API&lt;/a&gt; in v5 in favour of the styled API.&lt;br&gt;&lt;br&gt;
I worked with them to provide an alternative under the form of a third party module for people who prefers JSS over styled. &lt;a href="https://github.com/garronej/tss-react/issues/3#issuecomment-879022879"&gt;Ref&lt;/a&gt;.&lt;br&gt;&lt;br&gt;
&lt;a href="https://mui.com/guides/migration-v4/#2-use-tss-react"&gt;It's mentioned&lt;/a&gt; in mui's migration guide from v4 to v5.&lt;/p&gt;

&lt;p&gt;It also features a, type-safe by design, version of &lt;a href="https://github.com/garronej/tss-react#withstyles"&gt;the &lt;code&gt;withStyles&lt;/code&gt;&lt;/a&gt; HOC.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--81j_Bod0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://user-images.githubusercontent.com/6702424/136705025-dadfff08-7d9a-49f7-8696-533ca38ec38f.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--81j_Bod0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://user-images.githubusercontent.com/6702424/136705025-dadfff08-7d9a-49f7-8696-533ca38ec38f.gif" alt="demo_withStyles" width="370" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Checkout &lt;a href="https://github.com/garronej/tss-react"&gt;tss-react&lt;/a&gt;&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>react</category>
      <category>css</category>
    </item>
    <item>
      <title>tsafe: A new assertion function for TypeScript</title>
      <dc:creator>Garrone Joseph</dc:creator>
      <pubDate>Wed, 29 Sep 2021 15:41:30 +0000</pubDate>
      <link>https://forem.com/garronej/tsafe-a-new-assertion-function-for-typescript-1db0</link>
      <guid>https://forem.com/garronej/tsafe-a-new-assertion-function-for-typescript-1db0</guid>
      <description>&lt;p&gt;Three GIFs to convince you that you need &lt;a href="https://github.com/garronej/tsafe"&gt;&lt;code&gt;tsafe&lt;/code&gt;&lt;/a&gt; in your life:  &lt;/p&gt;

&lt;p&gt;Assert thing you know are true, get runtime error if you where wrong:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OyH7lhHK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://user-images.githubusercontent.com/6702424/134988258-9d3d4097-628b-4b8f-b00b-d256f7c2361c.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OyH7lhHK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://user-images.githubusercontent.com/6702424/134988258-9d3d4097-628b-4b8f-b00b-d256f7c2361c.gif" alt="ex1" width="422" height="264"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Test the type definitions of your APIs:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--j0DCb6IE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://user-images.githubusercontent.com/6702424/134994250-29f1b5c3-2193-49ba-ad75-e3c981723724.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--j0DCb6IE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://user-images.githubusercontent.com/6702424/134994250-29f1b5c3-2193-49ba-ad75-e3c981723724.gif" alt="ex2" width="422" height="194"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Make TypeScript believe whatever you say:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aDRrhQ_p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://user-images.githubusercontent.com/6702424/134994590-f01b8aee-a94a-4b4c-8f43-ee5ce8911443.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aDRrhQ_p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://user-images.githubusercontent.com/6702424/134994590-f01b8aee-a94a-4b4c-8f43-ee5ce8911443.gif" alt="ex3" width="422" height="255"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/garronej/tsafe"&gt;Here is the repo&lt;/a&gt; it you want to learn more.&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>testing</category>
    </item>
    <item>
      <title>Keycloakify: Create Keycloak themes using React</title>
      <dc:creator>Garrone Joseph</dc:creator>
      <pubDate>Mon, 12 Apr 2021 18:16:24 +0000</pubDate>
      <link>https://forem.com/garronej/keycloakify-create-keycloak-themes-using-react-5b89</link>
      <guid>https://forem.com/garronej/keycloakify-create-keycloak-themes-using-react-5b89</guid>
      <description>&lt;p&gt;
    &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F6702424%2F109387840-eba11f80-7903-11eb-9050-db1dad883f78.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F6702424%2F109387840-eba11f80-7903-11eb-9050-db1dad883f78.png"&gt;&lt;/a&gt;  
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/InseeFrLab/keycloakify" rel="noopener noreferrer"&gt;Keycloakify&lt;/a&gt; is a build tool that aims at making the creation of custom Keycloak themes as straightforward as possible.&lt;/p&gt;

&lt;p&gt;Keycloak provides &lt;a href="https://www.keycloak.org/docs/latest/server_development/#_themes" rel="noopener noreferrer"&gt;theme support&lt;/a&gt; for web pages. This allows customizing the look and feel of end-user facing pages so they can be integrated with your applications.&lt;br&gt;
It involves, however, a lot of raw JS/CSS/&lt;a href=""&gt;FTL&lt;/a&gt; hacking, and bundling the theme is not exactly straightforward.&lt;/p&gt;

&lt;p&gt;Beyond that, if you use Keycloak for a specific app you want your login page to be tightly integrated with it.&lt;br&gt;
Ideally, you don't want the user to notice when he is being redirected away. &lt;/p&gt;

&lt;p&gt;Trying to reproduce the look and feel of a specific app in another stack is not an easy task not to mention&lt;br&gt;
the cheer amount of maintenance that it involves.&lt;/p&gt;

&lt;p&gt;
    Without keycloakify, users suffers from a harsh context switch, no fronted form pre-validation:&lt;br&gt;
    &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F6702424%2F108838381-dbbbcf80-75d3-11eb-8ae8-db41563ef9db.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F6702424%2F108838381-dbbbcf80-75d3-11eb-8ae8-db41563ef9db.gif"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Wouldn't it be great if we could just design the login and register pages as if they were part of our app?&lt;br&gt;&lt;br&gt;
Here is &lt;code&gt;keycloakify&lt;/code&gt; for you 🍸&lt;/p&gt;

&lt;p&gt;
     &lt;a href="https://datalab.sspcloud.fr" rel="noopener noreferrer"&gt;With keycloakify:&lt;/a&gt;  
    &lt;br&gt;
    &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F6702424%2F114332075-c5e37900-9b45-11eb-910b-48a05b3d90d9.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F6702424%2F114332075-c5e37900-9b45-11eb-910b-48a05b3d90d9.gif"&gt;&lt;/a&gt;
&lt;/p&gt;  

&lt;p&gt;&lt;em&gt;NOTE: No autocomplete here just because it was an incognito window.&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;
    Ultimately the build tool Generates a Keycloak theme
    &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F6702424%2F110260457-a1c3d380-7fac-11eb-853a-80459b65626b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F6702424%2F110260457-a1c3d380-7fac-11eb-853a-80459b65626b.png"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;If you already have a Keycloak custom theme, it can be easily ported to Keycloakify.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/InseeFrLab/keycloakify" rel="noopener noreferrer"&gt;Checkout Keycloakify here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>react</category>
      <category>typescript</category>
    </item>
    <item>
      <title>react-envs</title>
      <dc:creator>Garrone Joseph</dc:creator>
      <pubDate>Tue, 16 Mar 2021 21:52:41 +0000</pubDate>
      <link>https://forem.com/garronej/react-envs-1m7c</link>
      <guid>https://forem.com/garronej/react-envs-1m7c</guid>
      <description>&lt;p&gt;Moved to: &lt;a href="https://dev.to/garronej/use-environment-variables-in-create-react-app-projects-78"&gt;cra-envs&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>docker</category>
      <category>typescript</category>
      <category>devops</category>
    </item>
    <item>
      <title>A GitHub repo template featuring automation that makes it pretty darn easy to publish and maintain grade A NPM modules.</title>
      <dc:creator>Garrone Joseph</dc:creator>
      <pubDate>Sat, 16 May 2020 12:56:06 +0000</pubDate>
      <link>https://forem.com/garronej/a-github-repo-template-featuring-automation-that-makes-it-pretty-darn-easy-to-publish-and-maintain-grade-a-npm-modules-5hk7</link>
      <guid>https://forem.com/garronej/a-github-repo-template-featuring-automation-that-makes-it-pretty-darn-easy-to-publish-and-maintain-grade-a-npm-modules-5hk7</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/garronej/ts_ci"&gt;ts_ci&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This template automates the boring and tedious tasks of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Filling up the &lt;code&gt;package.json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Setting up Typescript.&lt;/li&gt;
&lt;li&gt;Writing a &lt;a href="https://github.com/garronej/denoify_ci/blob/dev/README.template.md"&gt;README.md&lt;/a&gt; with decent presentation and instructions on how to install/import your module.&lt;/li&gt;
&lt;li&gt;Testing on multiples &lt;code&gt;Node&lt;/code&gt; version before publishing.&lt;/li&gt;
&lt;li&gt;Maintaining a CHANGELOG.&lt;/li&gt;
&lt;li&gt;Publishing on NPM and creating corresponding GitHub releases.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Good stuff that comes with using this template:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No sources file are tracked on the default branch.&lt;/li&gt;
&lt;li&gt;Shorter specific file import path.
&lt;code&gt;import {...} from "my_module/theFile"&lt;/code&gt; instead of the usual
&lt;code&gt;import {...} from "my_module/dist/theFile"&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;CDN distribution for importing from an &lt;code&gt;.html&lt;/code&gt; file with a &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tag.&lt;/li&gt;
&lt;li&gt;A branch &lt;code&gt;latest&lt;/code&gt; always in sync with the latest release.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>typescript</category>
      <category>github</category>
      <category>ci</category>
      <category>actions</category>
    </item>
    <item>
      <title>EVT: A new EventEmitter for Deno ( and every other JavaScript runtimes )</title>
      <dc:creator>Garrone Joseph</dc:creator>
      <pubDate>Wed, 15 Apr 2020 02:55:53 +0000</pubDate>
      <link>https://forem.com/garronej/evt-a-new-eventemitter-for-deno-and-every-other-javascript-runtimes-lol</link>
      <guid>https://forem.com/garronej/evt-a-new-eventemitter-for-deno-and-every-other-javascript-runtimes-lol</guid>
      <description>&lt;p&gt;&lt;a href="https://evt.land"&gt;https://evt.land&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Disclaimer: Although EVT is a marked improvement over &lt;code&gt;EventEmitter&lt;/code&gt; it can't compete in teme of feature scope with RxJS yet.&lt;br&gt;
There are important operators such as &lt;code&gt;swichMap&lt;/code&gt;, &lt;code&gt;mergeMap&lt;/code&gt;, &lt;code&gt;debounceTime&lt;/code&gt; and others that do not have an equivalent in EVT.&lt;br&gt;
However, EVT has two main things going for it already:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It allows performing &lt;code&gt;filter&lt;/code&gt;, &lt;code&gt;map&lt;/code&gt;, and &lt;code&gt;scan&lt;/code&gt; in a single operation which makes the code much less verbose and enables typescript to seamlessly infer what is going on.&lt;/li&gt;
&lt;li&gt;It is more accessible, the API is close to EventEmitter which allows getting started quickly and progressively leverage the more advanced features.
Any feedback much appreciated&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>typescript</category>
      <category>deno</category>
    </item>
  </channel>
</rss>
