<?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: Abel Emmanuel </title>
    <description>The latest articles on Forem by Abel Emmanuel  (@abellmanuell).</description>
    <link>https://forem.com/abellmanuell</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%2F751387%2Fa6329eb2-2625-48da-be39-3db82e7bf3ee.jpg</url>
      <title>Forem: Abel Emmanuel </title>
      <link>https://forem.com/abellmanuell</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/abellmanuell"/>
    <language>en</language>
    <item>
      <title># How I Redesigned the Interactive Cleva Banking Mobile App.</title>
      <dc:creator>Abel Emmanuel </dc:creator>
      <pubDate>Sun, 19 Oct 2025 22:08:04 +0000</pubDate>
      <link>https://forem.com/abellmanuell/-how-i-redesigned-the-interactive-cleva-banking-mobile-app-22pm</link>
      <guid>https://forem.com/abellmanuell/-how-i-redesigned-the-interactive-cleva-banking-mobile-app-22pm</guid>
      <description>&lt;p&gt;I made a post on LinkedIn today, 2hours ago, on the #Clevaredesignchallenge.&lt;/p&gt;

&lt;p&gt;78 hours ago, when I was scrolling through my LinkedIn news timeline, I saw a post made by Joseph Onaolapo about his redesign, then I inboxed him to share the link to the Figma file.&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%2Feoz1f1f5pbxx2bdaysjq.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%2Feoz1f1f5pbxx2bdaysjq.png" alt=" " width="495" height="569"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Even before he shared the link, I searched LinkedIn with the challenge’s keyword, and I saw all the participants’ redesigns; however, Joseph Onaolapo stood out to me.&lt;/p&gt;

&lt;p&gt;He shared the Figma link, and I turned the redesign User Interface (UI) into an interactive mobile application.&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%2Fa1fuqfb69wvnikszi7c3.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%2Fa1fuqfb69wvnikszi7c3.png" alt=" " width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is how it goes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;I opened the Figma file &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exported the icons and converted them into font icons for high performance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Download Geist font family (Light, Regular, Medium &amp;amp; Semibold).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set up &amp;amp; configured my SDK environment.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The challenge I faced while building it was converting the icons into font icons for high performance.&lt;/p&gt;

&lt;p&gt;I struggled converting some icons to font-icons. Not all the icons were able to convert with iconmoon or FlutterIcon; however, I got them all converted.&lt;/p&gt;

&lt;p&gt;Apart from icon conversion issues, nothing more.&lt;/p&gt;

&lt;p&gt;Kudos to Joseph Onaolapo; he redesigned it and shared the Figma file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Drive link (Android only)&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://lnkd.in/eJDWBhUx" rel="noopener noreferrer"&gt;https://lnkd.in/eJDWBhUx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What are your thoughts about it?&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>showdev</category>
      <category>mobile</category>
      <category>ui</category>
    </item>
    <item>
      <title>Fab3 is Live!</title>
      <dc:creator>Abel Emmanuel </dc:creator>
      <pubDate>Fri, 06 Jun 2025 13:05:14 +0000</pubDate>
      <link>https://forem.com/abellmanuell/fab3-is-live-47ag</link>
      <guid>https://forem.com/abellmanuell/fab3-is-live-47ag</guid>
      <description>&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%2Fv1kaebcelaz9drbtaodu.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%2Fv1kaebcelaz9drbtaodu.png" alt="Fab3 Overiew page" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's 1:36 PM over here.&lt;/p&gt;

&lt;p&gt;I felt I should start documenting my journey in a blog, and here I am doing it. I know it's not going to be easy, however, I'll keep on pushing until I have a billionaire product.&lt;/p&gt;

&lt;p&gt;Everything I'm going to be writing is going to be raw, as it's coming from my head.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Matter of the day.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yesterday, I bought a domain name for the current project I'm working on. I named it Fab3, it is a tool to help folks in Web3 to keep track, manage, and organize their Web3 airdrop project.&lt;/p&gt;

&lt;p&gt;The project is fun, and I've learnt a lot while working on this project. Most importantly, in terms of the database language implementation (MongoDB).&lt;/p&gt;

&lt;p&gt;A few minutes ago, I connected the domain name with the DNS server, installed the SSL certificate, and others.&lt;/p&gt;

&lt;p&gt;Everything is working fine, except for one thing: redirecting from HTTP to HTTPS. It wasn't a lot of work to do. I will be finishing it when I'm done with this blog.&lt;/p&gt;

&lt;p&gt;This is where I'll stop for today. Thank you for reading to this point. &lt;/p&gt;

&lt;p&gt;I'm &lt;strong&gt;Abel Emmanuel&lt;/strong&gt;, building products from Nigeria.&lt;/p&gt;

&lt;p&gt;Let connect on X &lt;strong&gt;&lt;a href="//htts://x.com/abellmanuell"&gt;@abellmanuell&lt;/a&gt;&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Click to visit &lt;a href="https://www.fab3.rest" rel="noopener noreferrer"&gt;fab3.rest&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>saas</category>
    </item>
    <item>
      <title>How I start typescript.</title>
      <dc:creator>Abel Emmanuel </dc:creator>
      <pubDate>Sat, 21 Dec 2024 12:31:59 +0000</pubDate>
      <link>https://forem.com/abellmanuell/how-i-start-typescript-3oel</link>
      <guid>https://forem.com/abellmanuell/how-i-start-typescript-3oel</guid>
      <description>&lt;p&gt;Hey there, &lt;/p&gt;

&lt;p&gt;If you're reading this particular post, I want to appreciate you specially by finding your way to my first technical writing blog post.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The Chinese proverb says "The journey of a thousand miles begun with a step". &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Firstly, my name is Abel Emmanuel and I'm a software developer, open source contributor and advocate. I will like to wish my humble self happy birthday. &lt;/p&gt;

&lt;p&gt;Today, being 20th December 2024, I started learning Typescript and  technical writing. I've known Typescript for quite sometimes but I never saw the important, usefulness, rich features and how it'll help me write better code.&lt;/p&gt;

&lt;p&gt;Ideally, I refused to learn Typescript earlier at the times I knew about it. I concluded there is no usefulness of learning Typescript since it has the same syntax and everything with JavaScript not until I got a job that required Typescript. &lt;/p&gt;

&lt;p&gt;This is how I started learning Typescript properly, if not I have zeroed my mind on Typescript.&lt;/p&gt;

&lt;p&gt;Today, I want to share the basic of Typescript and how important it is and how it can help you reduce the errors you write in your code.&lt;/p&gt;

&lt;p&gt;JavaScript from birth is not a typed language like C, C++, C#, Rust and other low-level programming language.&lt;/p&gt;

&lt;p&gt;In typed languages, variables and values have a types.&lt;/p&gt;

&lt;p&gt;This is what it means by typed-language using C programming language as a practical illustration.&lt;/p&gt;

&lt;p&gt;For example in JavaScript to defined a variable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let x = 5
typeof x    //number
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In JavaScript, &lt;code&gt;x&lt;/code&gt; can be reassign to a string value.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;x = "Emmanuel"
typeof x    //string
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Compare with low-level language like C programming language that you have to let the variable aware of the value data type. For instance:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;init x =  5
float y = 0.5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you attempt to reassign variable &lt;code&gt;x&lt;/code&gt; and &lt;code&gt;y&lt;/code&gt; it throw an error. However, JavaScript is a loosely typed language which can cause plenty of bugs in your code.&lt;/p&gt;

&lt;p&gt;To avoid this, you need a super-set of JavaScript called Typescript. Typescript is a static type checker that help check an error in a program before running the program.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let get started&lt;/strong&gt;&lt;br&gt;
Install Typescript globally or locally into your project.&lt;br&gt;
&lt;code&gt;npm install -g typescript&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Create a folder and name it typescript.&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%2F7xwcki0e8uj6ypt59bzz.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%2F7xwcki0e8uj6ypt59bzz.png" alt="Image description" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Right-click on the folder (typescript), open with visual studio code and create a file &lt;code&gt;test.ts&lt;/code&gt;.&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%2Fbm4l7jtvu2hcvd52zcgk.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%2Fbm4l7jtvu2hcvd52zcgk.png" alt="Image description" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After you've done that, the next step is to start writing your typescript.&lt;/p&gt;

&lt;p&gt;Inside your &lt;code&gt;test.ts&lt;/code&gt; file copy and paste code inside the file and run it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.log("Hello world");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To run typescript file. Open your Command Line Interface (CLI) and &lt;code&gt;tsc test.ts&lt;/code&gt;. The command will run the typescript file. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: If you do not install typescript you won't access &lt;code&gt;tsc&lt;/code&gt; in the CLI.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After you run it, you'll notice that nothing spectacular happen in the CLI but however, you'll note a new file &lt;code&gt;test.js&lt;/code&gt; in the folder.&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%2Flwrfyb1ypo21k7s0g5mb.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%2Flwrfyb1ypo21k7s0g5mb.png" alt="Image description" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open the test.js file you will note the command you run will output everything in &lt;code&gt;test.ts&lt;/code&gt; to &lt;code&gt;test.js&lt;/code&gt;.&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%2F2j9nk2flpjtrvjyla8jl.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%2F2j9nk2flpjtrvjyla8jl.png" alt="Image description" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let include types in our code. Let see how it look like in Javascript.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function meet(name, id){
    console.log(`Hello ${name}, your unique ID is ${id}.`)
}

meet("Abel Emmanuel", 7)
// Hello Abel Emmanuel, your unique ID is 7.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run &lt;code&gt;tsc test.ts&lt;/code&gt;. Nothing special happened.&lt;br&gt;
However, assuming the function call &lt;code&gt;meet()&lt;/code&gt; get a one argument like &lt;code&gt;meet(7)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Typescript will indicate a an error.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Expected 2 arguments, but got 1.ts(2554)
test.ts(1, 21): An argument for 'id' was not provided.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Normally, in JavaScript world the code is cool but that isn't what we wanted. So even though it doesn't throw an error at runtime. Typescript has help us identify a problem before hand. This is the cooool part of typescript. It help you write a less buggy codes.&lt;/p&gt;

&lt;p&gt;Let examine this code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function meet(name: string, id: number){
    console.log(`Hello ${name}, your unique ID is ${id}.`)
}

meet("Abel Emmanuel", 7)
// Hello 7, your unique ID is undefined.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note &lt;code&gt;function meet(name: string, id: number)&lt;/code&gt;, the additional &lt;code&gt;:string&lt;/code&gt; and &lt;code&gt;:number&lt;/code&gt;. this tell us that we are expecting a argument string and a number. If you do the otherwise your code will trigger an error.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Function return a type&lt;/strong&gt;&lt;br&gt;
We can allow our function to return a particular typed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function meet(name: string, id: number): string{
    return `Hello ${name}, your unique ID is ${id}.`
}

meet("Abel Emmanuel", 7)
// Hello Abel Emmanuel, your unique ID is 7.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Object Typed&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;interface Person{
    name: string;
    age: number;
}

function meet(person: Person): string{
    return `Hello ${name}, your unique ID is ${id}.`
}

meet("Abel Emmanuel", 20)
// Hello Abel Emmanuel, your unique ID is 7.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Other primitive typed Annotation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let x: string = "Abel Emmanuel"
let y: number = 20

Array Typed Annotation
type Pesron = Array[]

Generic Typed Annotation
type StringGeneric = Array&amp;lt;string&amp;gt;
type NumberGeneric = Array&amp;lt;number&amp;gt;
type ObjectNumberWithGeneric = Array&amp;lt;{number}&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In conclusion, Typescript is a typed language that help you write a better JavaScript and lesser bugs. Read more on Typescript Official website: &lt;a href="https://www.typescriptlang.org/" rel="noopener noreferrer"&gt;Typescript&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Let me know if you find this post helpful and if there's a better way to improve I will be glad to learn from you. Thanks for reading my first post.&lt;/p&gt;

&lt;p&gt;Follow me on &lt;a href="https://x.com/abellmanuell" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; where I share great content. &lt;/p&gt;

</description>
      <category>typescript</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
