Jamstack - create & deploy the project on MDB GO

How to deploy & host Jamstack app - tutorial & free hosting

After reading this tutorial you will know how to create full-stack apps using Jamstack.

What does JAM stand for?

JAM is an acronym for:

  • JavaScript
  • API
  • Markup

Let's quickly recall what are these.

JAM recap

Here's a quick recap what are the main technologies used in the Jamstack:

  • JavaScript is an object-oriented computer programming language commonly used to create interactive effects within web browsers.
  • API is the acronym for Application Programming Interface. It defines interactions that allows two applications to talk to each other.
  • Markup refers to how you can structure or format content, it allows to organize the look and presentation of all the content that needs to go on a web page.

If you have enough knowledge to get started, let's do this.

Building the Jamstack app

There are many ways to generate your HTML resources. Which one you choose is up to you. The three most common approaches are:

  • Hand coding
  • Static Site Generators
  • Site Builders

In this tutorial, I will show how to create and publish a page using the Hugo page generator.

Let's go!

Step 1: Install Hugo

Follow the instructions in the documentation to install Hugo on your operating system.

Step 2: Create a New Site

In order to create a new Hugo site you need to run the following command:

              $ hugo new site my-hugo-app

Step 3: Add a Theme

See themes.gohugo.io for a list of themes to consider. This tutorial uses the Hello Friend theme.

              $ cd my-hugo-app
              $ git init
              $ git submodule add -f https://github.com/panr/hugo-theme-hello-friend.git themes/hello-friend

Then, add the theme to the site configuration:

              $ echo theme = \"hello-friend\" >> config.toml 

Step 4: Add Some Content

You can manually create content files and provide metadata in them, however you can use the new command:

            $ hugo new posts/my-first-post.md 

Edit the newly created content file if you want, it will start with something like this:

              title: "My First Post"
              date: 2019-03-26T08:47:11+01:00
              draft: true

Note: Drafts do not get deployed; once you finish a post, update the header of the post to draft: false.

Add cover image and post content, the file content should look like this:

              title: "My First Post"
              date: 2019-03-26T08:47:11+01:00
              draft: true    
              cover: "img/island.webp" 
              Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut suscipit vehicula dapibus. Curabitur mi sapien, 
              sodales at accumsan non, cursus non sapien. Sed pellentesque tristique ex ut lacinia. Vestibulum viverra 
              lectus nisi, sit amet posuere odio tristique et. Etiam vel lectus et felis rutrum fringilla eu ut nunc. 
              Maecenas auctor libero felis, vel gravida lacus pellentesque at. Phasellus ullamcorper sodales nunc,
              a varius enim imperdiet ut.
              Curabitur non tincidunt nisl, vel imperdiet eros. Proin ut feugiat sapien. Phasellus aliquet luctus luctus. 
              Nam eu ornare tortor, nec venenatis mauris. Aenean vitae ultrices dolor. Fusce et eros vel massa ultrices posuere.
              Maecenas tempus ante sed porta rutrum. Nunc accumsan nunc leo, at imperdiet risus posuere eget.

Note: Put the images in the static folder and specify the path to them in the cover parameter.

Step 5: Start the Hugo server

Now, start the Hugo development server.

              $ hugo server -D
              Start building sites … 
              hugo v0.89.4-AB01BA6E+extended linux/amd64 BuildDate=2021-11-17T08:24:09Z VendorInfo=gohugoio
                                | EN  
                Pages            | 11  
                Paginator pages  |  0  
                Non-page files   |  0  
                Static files     | 13  
                Processed images |  0  
                Aliases          |  2  
                Sitemaps         |  1  
                Cleaned          |  0  
              Built in 47 ms
              Watching for changes in /home/sf/Test-Projects/qqq/my-hugo-app/{archetypes,content,data,layouts,static,themes}
              Watching for config changes in /home/sf/Test-Projects/qqq/my-hugo-app/config.toml
              Environment: "development"
              Serving pages from memory
              Running in Fast Render Mode. For full rebuilds on change: hugo server --disableFastRender
              Web Server is available at http://localhost:1313/ (bind address
              Press Ctrl+C to stop


Navigate to your new site at http://localhost:1313/. Feel free to edit or add new content and simply refresh in browser to see changes quickly.

Step 6: Customize the Theme

Open up config.toml in a text editor:

              baseURL = "https://example.org/"
              languageCode = "en-us"
              title = "My New Hugo Site"
              theme = "hello-friend"
              paginate = 3

For example, add the number of posts visible on the page, replace the title with something more personal. Also, if you already have a domain ready, set the baseURL. Note that this value is not needed when running the local development server. For theme specific configuration options, see the theme site.

Step 7: Build static pages

Just use the command:

              $ hugo -D 

Output will be in ./public/ directory by default (-d/--destination flag to change it, or set publishdir in the config file).

Step 8: Deploy on MDB GO

It's simple. Go to your output directory and call:

              $ cd public
              $ mdb frontend publish

Note: Since frontend is a default value for publish command, you can run just mdb publish (instead of mdb frontend publish )

If you are publishing for the first time, CLI will ask you few initial questions like

  • Whether you want to use npm or yarn?
  • What is your project name, version, description, github address and license?

Once you successfully publish your project they will be stored for a future.