Deconstructing Chatbots

AI and Chatbots are trending topics nowadays, but some people don’t understand how terrific could be a chatbot in business.

The following video shows how chatbots works, can they understand what humans says, and how they can response by using artificial intelligence.

Is your business leveraging chatbots to support clients or maybe your business planing the next move? Take a look.


7 Steps of Machine Learning (Artificial Intelligence)

Hi 4Geeks Nation! I want to share with you this video (from Google AI) that explain so clear 7 steps of Machine Learning.

  • Gathering Data
  • Preparing that Data
  • Choose a model
  • Traning
  • Evaluation
  • Hyperparameter Tuning
  • Prediction


SmarterSelect: 4 Main Product Challenges Solved

Digital businesses need a good ideation, implementation, execution and growth, but at the development side the challenges are huge as well. As much as a product grows, so do the challenges and problems to solve.

In this opportunity I want to tell you the main product development challenge our engineering team faced, and I will show you how we fixed it. Maybe your business are facing some similar issues and this post can help you to find a solution.

SmarterSelect is a web platform to create and manage forms. As they say: “Online Applications. Made Easy”. Over 1 million active users (and counting) are creating and managing online applicationsgrantsscholarships on SmarterSelect every week in the United States.

SmarterSelect enable partners like Texas Tech UniversitySan Angelo Area Foundation and Vermeer to manage online applications.

4Geeks created a engineers dedicated team, getting together Ruby on Rails engineers and Quality Assurance experts, to solve past issues and improve the product constantly.

Let’s start! Here is the 4 main problems we found and how we fixed it.

Challenge #1: QA manual

Too many projects faces issues in production, customers don’t like that for sure. Our first recommendation is to add human power to avoid mistakes on development. QA people is amazing to think on hundred of combinations for test scenarios, that what SmarterSelect needed.

We added QA experts to the team, in the same building to improve communication on issues and help the developers to create ever more code quality.

Listen to this podcast episode when we talked with Meli, the QA Leader in SmarterSelect.

Challenge #2: Dockerize the app

I remember having some bad nights working with server infrastructure, libraries. With Docker we got rid of that, same container, same for all environment, we forget about the differences on development, staging or production.

Also, some advantage we see is when some new developer joins to the team. There will be no need to spend hours or days trying to install all gems, libraries and dependencies with just a docker command, voilà! environment ready. Our client is definitely happy for that.

Challenge #3: Implemented CI tools

The team introduced CircleCI to the projects, helping us on running the small (increasing)  set of automated tests before putting any code into main branches.

For every PR (Pull Request) we run CircleCI containers and confirm the code is not breaking any configuration or code.

Have you implemented (or thinking to do) CI tools on your project? Comment below your experience.

Challenge #4: Rails upgrade

This is a huge deal. Some day we decided that It was time to move from Rails 2 to Rails 4. It sounds crazy but we didn’t want to do a little migration to Rails 3 to later move to Rails 4. It was time to do the roughest change.

So for 4 months the team was focused on create features and migrate at the same time. It was a complete successful, and now we are thinking on move to Rails 5 for sure, but our client doesn’t know (probably he will find out here).

We improve some security issues by that migration and we also did some refactors on old legacy code.


Bonus: Download the full Case Study in order to get know how SmarterSelect grew up more than 110% in 2018.

If you need help with your business/product and your annual revenue is $3M+, please reach out to us; our consultants will be happy to assist you on find the right path and solution.

How We Built a Real Chatbot for Google Assistant, Step by Step

I know a lot of software companies blogging about top emerging technologies, and talking about how easy can be create a product by implementing technologies like Machine Learning, Artificial Intelligence and so. There are hundred of people requesting attention out there.

Instead of talking, 4Geeks is building and creating products; and today I would like to show you how we built a real chatbot for Google Assistant… for example purposes.


Google Assistant is the engine running on Google Home (smart speakers – similar to Amazon Alexa), mobile phones, websites, watches and cars. Yep, cars. Take a look at this video to understand Google Assistant scope.

A chatbot basically is a program with capability to understand natural language (English, Spanish, French…) and trigger orders.

We have been sharing a lot of valued content for developers and decision makers about the unmeasurable power of Artificial Intelligence for so many industries.

Step by step

Please, look at the following 52-min video (please enable captions) where I built a real chatbot, step by step. For this demo I used some technologies like DialogFlow, to send orders and interact with Google Assistant on a natural-language way.


If you want to learn more about text-based and voice-based chatbots, maybe you want to listen this podcast episode where Sergio and I talked about chatbots. If you need help with your business processes automation, just let us know.

Have any questions? Please use the comments below.

4 Main Benefits of Using a Cloud Storage Service on Your Product

Hello there! Today I want to put in perspective one of the most powerful tools of Cloud Computing on modern products. Any kind of product, any industry… it may be a SaaS or PaaS.

If you already know what cloud storage is, good. But if don’t have idea what is it, let me explain you in a few words: Cloud storage is a cloud computing model in which data is stored on remote servers accessed from the internet. That’s it. And there are some excellent providers in the game like Amazon Web Services (AWS S3), Google Cloud Storage and Microsoft Azure Storage.

One of my favorite cloud storage providers is Google Cloud Storage. Why? Listen to this podcast episode when I talked, with Sergio, about this service, pros and cons.

Some popular services like Netflix, Uber, Coca-Cola, Spotify and Mall4G are storing a huge size of objects on cloud storage, keeping a good server performance and scaling as much they can.

Let me know detail you the 4 main benefits of using cloud storage on your current or next product, and why founders love it:

Benefit #1: Better product performance – auto CDN.

More and more product owners are splitting assets (images, CSS, videos, fonts…) to upload it to a cloud storage service because they already how fast and secure is the content delivery rate. So, it means two advantages: don’t overcharge main servers and leveraging on a CDN (Content Delivery Network) to delivery objects to users browser or phone app.

When the 4Geeks team integrated a storage service on Appetito24 (food delivery app), users in different regions automatically obtained an improvement in the mobile app and web administration panel: 65% faster.

Here the map of Google Cloud Platform datacenter locations around the world.

Google Cloud Platform datacenter locations


And here is the Amazon Web Services (AWS) and Microsoft Azure datacenter location around the world.

Amazon and Azure datacenter locations

Benefit #2: Money saving

This is one of the most important advantages of cloud storage, because the current providers have very competitive billing plans. The price may vary depending on the provider, but I can say that starts from $0.026 USD per Gigabyte per month.

Now you can figure out the price to store a movie on a cloud storage service.

Google, for example, offers a free quota of 5GB per month.


Benefit #3: Good for a recovery plan

I know some traditional companies, like Despacho Carvajal in Costa Rica, that are hosting its important docs, images and videos on a cloud storage service as its main backup plan. Store unlimited objects, 100% private (or public– you choose.).

Google Cloud Storage, for example, can manage different versions of a single object; so it make possible to rollback as much you need to get a preview object version. This is so powerful.


Benefit #4: Scalable service

Founders know the power of scalability. Please imagine for a few seconds: Netflix uploads a movie one single time, and it can appears instantly on all TVs, computers, phones and tables around the globe. By magic.


Security deserves a complete article, which I will publish soon for you.

As always, if you need help to migrate your product assets to a cloud storage service, please feel free to pick a date to autogenerate an online meeting with me. Or if just looking for more information, write us at any time. The engineering team can assist you to take a good decision for your company.

Appetito24 Partner Up With 4Geeks to Deliver Food in Panama

Have you hear about Appetito24 before? Yes? Cool. No? Well, it’s a food delivery app where users can order food from their favorite restaurant in the city to their house or office, in Panama.

In this field you can find some providers similar to Appetito24, like Uber Eats, Glovo, Eat24, Instacart and Amazon.

I’m very proud to tell you that 4Geeks engineering and design team helps to Appetito24 run, by making possible that the mobile app to be up and running. It sound easy to say, but it’s a titanic work. Details counts.

Plus to order food by the mobile app, users can buy market products directly from home (chicken, eggs, cheese, apples, etc).

Nowadays the app serves more than 200K users, and tons of orders daily.


Appetito24 CEO Enrique Valencia says this about 4Geeks:

We have been closely working with 4Geeks for months, developing in different languages for our ongoing operations in Central America. Support/Quality and delivery time are always met. We look forward to continue doing business with them in this and new projects to come.

Appetito24 is today under the PedidosYa group. PedidosYa is right now delivering food in Argentina, Bolivia, Brazil, Chile, Paraguay, Panama and Uruguay.

Get more details about the work we did on this product, like the technology stack, the solution we implement and some extra key points, by visiting the case study page. Also, if you are curious person,  take a look at the 4Geeks Product Development Cycle to get know how we design and build products like Appetito24.

So guys, if you are in Panama and you are so hungry, just download the mobile app for Android and iOS.

4Geeks is a product development and design company. If you need help with your product, no matter your product stage, become a client. We have a robust engineering team

Bon appetit!

Buying Items Securely Through Google Assistant

Voice services game players are doing a great job on enabling new ways to make life easier by using its voice products. In particular Google is pushing hard to

Customers already knows that people don’t just want to get know the weather forecast or something like that. They demand more value and smart solutions. Put simply, they want an easier way to get their shopping tasks done.

Recently (March 2018) Google announced Shopping Actions to let user to order products from stores directly from a simple web search, Google Assistant or any “Google place”.

In addition, Shopping Actions uses a pay-per-sale model, meaning you only pay when a sale actually takes place. Shopping Actions appear within the sponsored Shopping Unit on the Google Search page, and on No organic rankings are impacted or changed.

Source: Google Blog

So far, Google is encouraging companies to see it as an ally against Amazon. “We have taken a fundamentally different approach from the likes of Amazon because we see ourselves as an enabler of retail…We see ourselves as part of a solution for retailers to be able to drive better transactions,” Google’s president for retail and shopping Daniel Alegre told Reuters.

Google explains the main features of Shopping Actions to retail and e-Commerce industries:

  • Surface your products on new platforms like the Google Assistant with voice shopping.
  • Help your customers shop effortlessly with you, across Google. A shareable list, universal shopping cart and instant checkout with saved payment credentials work across and the Google Assistant — allowing your customers to seamlessly turn browsing into buying.
  • Increase loyalty and engagement with your highest value customers.


Over the past 6 months, Target said the number of items in shoppers’ Google Express baskets have increased by nearly 20 percent, on average, as a result of its tie-up with the internet company.

From now every single Google user (from mobile devices, desktop or Google Home) can buy products directly by voice.

Remember: Smart voice devices like Amazon Echo and Google Home will be installed in 55 percent of U.S. households by 2022, according to Juniper Research. This is a great opportunity to increase sales and engage users.

If you are into e-Commerce or retail industry and want to reach out more customers nation wide, please contact us to refer you the Google Shopping Action program.

How Robotic Process Automation can boost your company

Entire industries around the globe are looking for the way to achieve more results with minimal investment in time and money. But the thing is most of companies can not find the right way quickly, and obviously it will die, by being ate for some other smarter companies with no fear to change.

Thanks to technology today we have some tools (or ways) to get a huge ROI (Return Of Investment) with the minimal effort. This is not a calling to be vague or something like that: on the contrary, my purpose is letting know you about new smarter ways to make better business.

Ok. Robotic Process Automation (RPA) is the key. Basically RPA is to programming computer to do common tasks, quicker and safer. And you can put this concept on almost any are of your company. RPA is your new employee.

RPA is more than a simple chatbot, it includes Machine Learning to automate business process. For example, entering or updating data on your ERP (and other internal systems you use) as it new leads come. A chatbot triggers a RPA bot who creates the signature.

Myths and Truths


It’s 2018, but even there are small-mindset owners. That’s normal. It ocurres because they don’t have the right information.

Myth #1: RPA is for big companies

This is one of the most common phrase I have heard from small business owners, because historically the best and powerful business tools were only for big companies. It’s an understandable paradigm.

Thanks to modern technology, today small and big companies can access the same benefits. The difference is on their owner’s mindset. RPA is not only for big companies, in terms of money and infrastructure. The investment is proporcional to the quantity of customers/employees.

Myth #2: RPA is expensive

Sure, RPA does have initial implementation costs. These include the provisioning of IT infrastructure such as databases, servers, network, etc. Running costs are largely time related and centre around the ongoing delivery and maintenance of processes, maintenance of underlying infrastructure and support.

You already knows that an expensive investment is when your return is less than the initial investment. This is not a bet. So, in this case, by using tools your consultant company can help you to predict the final impact, in order to measure the building and implementation cost.

Remember one thing: RPA will be your 24/7 employee. No tired. No excuses.

Are you a startup with limited budget? Pay as you grow.

Myth #3: RPA will replace humans

I know tons of people, including CEOs and engineers, think that RPA will replace them, and it will kill their business. Please, stop thinking on that way. Forget it! Drop it!

I strongly see humans using the bot’s power to boost and do smarter business.

As I said before: bots will be your 24/7 employee.


RPA uses cases

Now you knows the benefit of implementing RPA skills on your business, to analyze or operate processes. So, please let me describe some RPA uses cases… hope it can inspire you.


Ok. Here at 4Geeks we love to help business to implement automation process, that it can be translated to better business performance, saving, growth. Let us know if you need help.

Deploying a ReactJS and NextJS project to Firebase

We are in one of the best moments as developers, living among wide range of technologies, tools and trends that every day only grows and grows, and if you are passionated about learning and applying technologies during your spare time, today is the time.

Today we will focus precisely on ReactJS and the performance we can provide to our applications using the scalability of Firebase with Cloud Functions itself.

In addition, we will use the NextJS framework to server rendering, which will help us to easily configure and solve SEO issues but, more importantly, the lower degree of latency between server and client to offer the users the best experience.

Let’s start!

We need first to install Next.js in our work environment:

npm install -g create-next-app

Followed We create a project named “firebase-nextjs”:

create-next-app firebase-nextjs: this command will create the project but it will also install the react and react-dom dependencies, which can be seen in the package.json file.

We run yarn dev and our project will run, by default, on port 3000 (localhost:3000).

NextJS will search the corresponding file in the pages folder for each route, for example: the path “/” indicates that the file pages/index.js will be searched.

The framework is built on React, it maintains a structure appropriate to it, which is why we can see a folder called “components”, where each component we want to use for our views will be store.

So, if we use NextJS and React, why not to add Material-UI?

Let’s install locally Material-UI: npm install @material-ui/core.

We will create two very simple pages to observe the behavior of these three frameworks made to make life easier!

In the folder pages we create “page1.js” and “page2.js”.

We add the following code to pages/page1.js:

import Card1 from ‘../components/card1’


const Page1 = () => (


   <Card1 />




export default Page1

In the folder components we create “card1.js” and add any of the examples in Material-UI in the cards section and personalize it in our own way.

To see the content of the page page1.js we can go to “http://localhost:3000/page1” or use Link of NextJS to redirect us.

We do the same steps for “page2” and “card2”.

Up to this point, we should have a NextJS application working perfectly with React components.

We are ready to enter the most interesting part of this post. We are going to structure our project according to the guide of James Hegedus.

Therefore, at the root of our project we create a folder called “src”, inside this folder you will find another another called “app”, where our entire application files will be stored, we might move all the files to the “app” folder.

We will go to the firebase console and create our project.

We will be presented the general panel of the project, as you can see, Firebase gives us Authentication, Database, Storage, Hosting, Functions and ML Kit, each of them very interesting, but we will focus on Functions.

Why Functions? If we do not use NextJS, and it is enough that in our source code of the application we see only some ‘<script>’ tags then the option would be Hosting, but we want to get the server rendering and the magic of NextJS that is really amazing.

Next we run the following commands in the root of our project:

  • yarn global add firebase-tools
  • firebase login
  • firebase init

When we run firebase init, a series of questions will be displayed:

  • Which Firebase CLI features do you want to setup for this folder? | Select “Functions” and “Hosting”.
  • Select a default Firebase project for this directory: | Select the project that you created earlier in the firebase console.
  • What language would you like to use to write Cloud Functions? | In my case is “Javascript”.
  • Do you want to use ESLint to catch probable bugs and enforce style? | Write “N”.
  • Do you want to install dependencies with npm now? | At this time it is not necessary, write “n”.
  • What do you want to use as your public directory? | Write “src/public”, two files will be created that will be created to show the first view in case of not finding any and the other in case of error.
  • Configure as a single-page app (rewrite all urls to /index.html)? Write “N”, in our case it should be a more complex application.


We will find in the root of our project a folder called “functions”, just move it inside “src” folder.

In our file firebase.json we remove the existing code and update it by the following:


 “hosting”: {

   “public”: “src/public”,

   “rewrites”: [


       “source”: “**/**”,

       “function”: “next”



   “ignore”: [






 “functions”: {

   “source”: “src/functions”



In the package.json of the functions folder we add the following dependencies (after several tests I consider that they are the versions that present fewer errors):

“@material-ui/core”: “^1.4.3”,

   “classnames”: “^2.2.6”,

   “firebase-admin”: “~6.0.0”,

   “firebase-functions”: “^2.0.0”,

   “next”: “^6.1.1”,

   “prop-types”: “^15.6.2”,

   “react”: “^16.4.2”,

   “react-dom”: “^16.4.2”

In the case of dependencies “classnames” and “prop-types”, they are needed for this example that we are developing, also as a tip, each dependency we need for our project must go in this file as well as src/app/package.json , therefore, also add the dependencies to src/app/package.json.

To make sure that NextJS runs successfully in Cloud Functions, we remove the contents of functions/index.js by:

const functions = require(“firebase-functions”)

const next = require(“next”)


var dev = process.env.NODE_ENV !== “production”

var app = next({ dev, conf: { distDir: “next” } })

var handle = app.getRequestHandler() = functions.https.onRequest((req, res) => {

 console.log(“File: ” + req.originalUrl) // log the page.js file that is being requested

 return app.prepare().then(() => handle(req, res))


Now we proceed to install the dependencies in functions and in app, within src/functions and src/app run yarn or npm install depending on the manager you use.

We create a .gitignore inside the functions folder and add only “next”.

We need our material-ui components to be displayed correctly, thanks to NextJS we should only add the following to src/app/next.config.js:

const path = require(‘path’)

const glob = require(‘glob’)


module.exports = {

 distDir: “../functions/next”,

 webpack: (config, { dev }) => {



       test: /\.(ico|gif|png|jpg|jpeg|svg|webp)$/,

       use: [


           loader: ’emit-file-loader’,

           options: {

             name: ‘dist/[path][name].[ext]’




           loader: ‘file-loader’,

           options: {

             name: ‘dist/[path][name].[ext]’






       test: /\.(css|scss)/,

       loader: ’emit-file-loader’,

       options: {

         name: ‘dist/[path][name].[ext]’




       test: /\.css$/,

       use: [‘babel-loader’, ‘raw-loader’, ‘postcss-loader’]



       test: /\.s(a|c)ss$/,

       use: [‘babel-loader’, ‘raw-loader’, ‘postcss-loader’,

         { loader: ‘sass-loader’,

           options: {

             includePaths: [‘styles’, ‘node_modules’]

               .map((d) => path.join(__dirname, d))

               .map((g) => glob.sync(g))

               .reduce((a, c) => a.concat(c), [])






   return config



Let’s update our package.json that is in the root of the project with the scripts with which we will handle the application:


 “name”: “firebase-nextjs”,

 “version”: “1.0.0”,

 “license”: “MIT”,

 “scripts”: {

   “install”: “yarn build-all”,

   “next”: “yarn build-firebase && cd \”src/app\” && yarn && yarn dev”,

   “preserve”: “yarn build-all”,

   “serve”: “firebase serve”,

   “predeploy”: “yarn build-all”,

   “deploy”: “firebase deploy”,

   “build-all”: “yarn build-next && yarn build-firebase”,

   “build-next”: “cd \”src/app\” && yarn && yarn build”,

   “build-firebase”: “cd \”src/functions\” && yarn”



Now, in the root project run yarn init and then you have the next options:

yarn next: We run the project locally by port 3000 by default.

yarn build-all && firebase deploy –only functions: we build our project for production and deploy to firebase.

With all the steps above the application must run successfully, the test project is available in github, so you can compare, to get a better guide and understanding of the code.


This is a contribution that is made from the same learning obtained, so we are willing to feedback and/or answer your concerns about the technology and the project as such.

We try to be aware of the frameworks and tools of the moment to get the most out of each one, so you can expect more from this type of blogs.

Enjoy it!


Resources we used:

  • NextJS: 6.1.1
  • React: 16.4.2
  • Firebase functions: 2.0.0
  • Material-UI: v1.5.0


how the internet works

Have you ever thought about how Internet works?

If you are reading this article you have an Internet connection (or a very special power that should be sharing with the world). We know that the data is going to travel from our devices to the Internet and then come backs. But, what is the Internet? Popularly the Internet is a “network of networks”, all the devices that are participating in the Internet are connected to a company that serves that connection. We know them as Internet Service Provider (ISP).

The ISPs connect each other to keep the data traveling from one place to another. As you can imagine, there are a lot of ISP and some of them have better infrastructure than others. Depending of their characteristics, we have tiers that allow us to classify them in Tier 1, Tier 2, and Tier 3.

The Tier 1 ISP allows the communication between each other, they do not bring services to the end user (you and me), and their infrastructures is bigger than other tiers. Can represent big land extensions, for example, continents, and allows the data exchange through sea cables.

Tier 2 ISP are in charge of connect Tier 1 with Tier 3 through agreements. Their size is less than Tier 1 and they could be part of them. Tier 3 conforms Tier 1 and Tier 2 and bring the different services to the end user. Now that we know the different tiers, it surge a big question: how do they allow that communication between each other?

The Autonomous System (AS)

Until this moment we only know about the ISP definition, but there is another important concept that have not been touched: an Autonomous System (AS). Basically, an AS is a system that could change its behavior in response of an unexpected event. At network level, it is a collection of devices that their behavior are under common administrative control. It could be a company, an university, an ISP, a organization or a mix of them.

To allow data exchange, they work under the Border Gateway Protocol (BGP). This protocol is not an automatic one that calculates the best way for the data to get from one point to another, but it takes in count different aspects that could be political or economical.

Many AS have contracts that allow another AS to use their networks to transmit data without cost, this practice is called Peering. On the other hand, when an AS charges to transmit data through its networks is called Transit. These contracts obligate to an AS to choose a route that cannot be the optimal.

Let us think in a little example. AS C is located in Brazil and needs to exchange data with AS Z from Australia. AS C does not know which route have to use. It has two possible options: send the data via AS I that is far away from AS Z, the data has to travel to another AS T before arrives Z, and it is very expensive, or AS M, which is really close to AS Z and the best option to choose. Which option do you think AS C it is going to use to send data? AS M ? No, it decides to send it via AS I.

Visual representation from our example.

The data that pass through AS I also needs to travel through AS T before reach its destination. Vectors graphics designed by Freepik.

AS I was not the best option, but we did not know that the organization in charge of AS C has an economical agreement, which obligates all the data to travel via AS I. In case that AS I gets down, the data will travel via AS M  (the AS C needs to send the data, if the other AS is available, why not send the data through AS M?)

In real life, AS are identified by numbers. Internet Assigned Numbers Authority (IANA) is the nonprofit organization in charge of assign those numbers to each different system. Each region in the world has a register (member of IANA) that has a pool of numbers available to be assigned according to their necessities.

Now you know how the data is transmitted from one side to another. As you could noticed, we have a big political problem: some AS could deny to transmit all the information from a specific AS, many places even countries could be banned from Internet applying this restriction. But this is another topic that we will see in another article.