Archive

Archive for June, 2020

7 Best Resources for Content Marketing Tools

June 9th, 2020 No comments

Content marketing is the planning, creating, sharing and publishing of content to reach your target audience. It helps you increase brand awareness, engage with prospects, and convince them to convert.

Content marketing offers businesses a much more efficient alternative to paid advertising. In fact, content marketing gets 3 times as many leads as paid search. Content marketing also boasts conversion rates 6 times higher than other advertising tools. And when it comes to blogging, those businesses who publish more than 16 posts monthly get more than 3.5 times the traffic than those who post 3-5 times.

It’s clear that content marketing is essential to growing your business. However, it has never been easy. Before any piece of content is laid out, it intentionally goes through different stages of production.

There are countless tools that can help you get the most out of your content marketing strategy. And in this article, we want to draw your attention to 7 of those essential tools. They are some of the most effective ways to boost your content creation.

1. Buzzsumo Hunts for Your Content Relevancy

Do you find it hard to find topics that are trending in your industry?

Do you find it hard to know what your competitor is writing about?

Buzzsumo is a great content research tool. It is one of the major tools to help analyze and understand what topics in your niche perform best for you and your competitors. You’ll find metrics like shares, and the influencers that are most relevant for your niche.

Once you’re registered, you’ll constantly receive alerts about content that mentions your keywords. These reveal topics you should write about to reach your audience’s needs, and make it more fun to brainstorm content ideas.

My favourite feature is Content Research. Before 2014 it was their only feature. And even after they added a bunch of other features like Facebook Analyzer, Monitoring, and Question Analyzer, it is still the one I frequently use for relevant content creation.

First, begin by researching your keywords with Google’s keyword planner. Once you’ve found one that has potential, you can enter them into Buzzsumo, and remain aware of trending topics people are following on different social engines.

Buzzsumo also enables you to get in touch with bloggers who continuously spread the word about what you need your industry to be heard for.

Buzzsumo is mainly geared towards professionals in marketing. So if you are serious about marketing and SEO, I highly recommend you to give this tool a shot.

Once you are well-aware of what you are going to jot down, time to pass on to the next tool.

2. Google Docs is as Important for Marketers as a Kitchen is to Chefs

Personally, I don’t know any content marketers who don’t use Google Docs to craft articles. It is also super easy and convenient to organise productive teamwork.

I especially love headings in this tool. By adding headings to the document, text gets logically divided into semantic groups. It becomes more suitable to find the necessary paragraph instead of scrolling on up and down for the right passage to edit.

Recently, Google added a new feature to ease the burden of excessive writing.

Can you guess what it is?

It is voice typing.

Yes, you read it right. VOICE TYPING. You speak what’s on your mind, and the text writes itself. Isn’t that cool?

Also, Google Docs gives you the option to download your content in different formats, including PDF, .docx, .odt, .rtf, .txt, .html zipped, .epub. All in one place.

Google Docs also helps you access your content from anywhere you want.

As your writing must look professional in all aspects to make your readers trust you, I feel obliged to bring you to our next tool which is Grammarly.

3. Grammarly Provides FREE Writing Assistance

Grammarly has changed the game once and for all.

With Grammarly, you definitely won’t slip through any grammar mistakes that to some extent litter articles. Even the most detail-oriented editor might not notice the errors Grammarly brings to the surface.

It has reduced my error rate by around 50-80% by analyzing any types of texts, highlighting errors, and making suggestions on what I can replace them with.

The free version covers basic grammar errors, punctuation, spellings, tone detection and conciseness. However, if you want more succinct content, Grammarly offers a premium package. It includes style suggestions and clarity improvements in terms of fluency, readability, word choice, plagiarism, inclusive language, formality.

Grammarly greatly helps to make content sound more native. It contributes to the smooth flow of language in texts. This is pretty vital for people like me who weren’t born with English as a first language. Quite often, I use it to make sure the text sounds truly “English English”.

The overuse of definite articles is the most common problem at present that I have to deal with. That’s why I immensely appreciate Grammarly in this effort.

This is an ultimate tool for you to use if you want your writing pieces to look ubiquitous.

Tip: After you finish up your body parts, then craft a headline. Only then you know what your content contains as a whole.

Headline writing is another artwork that my next favourite tool will make easy for you.

4. Portent’s Content Idea Generator

How many times have you drafted headlines and deleted them in a second because they weren’t attractive enough?

It’s no secret that headlines are a top-notch hook to attract readers on their first glance. Thus, it is super important to bring your attention to this point. I understand it is tough to come up with exclusive headlines to rank higher than your competitors.

Here Portent’s Content Idea Generator walks in to assist. It analyzes headlines based on a variety of factors, like sentiment and length. Just type any keyword you want, it will show you a ready headline with in-depth explanations on each component of the tail.

Not pleased with what you have been offered?

Just rinse it with the arrow and repeat the search until you find the most perfect variant for you.

As you are now reading this article, it is a genuine proof of how well the headline generator worked for us.

Next, we are going to talk about the most popular CMS to upload and manage your content and make it available for readers.

5. WordPress is Home to Your Content

WordPress is the most widely used content management system. According to Venturebeat, it powers 30% of the Internet in general.

Social proof might lead us astray, but WordPress truly is the best in comparison with its rivals both at the beginning stages and as you continue to grow your content marketing strategy. For instance, even sites like the New Yorker are hosted on WordPress.

At its core, WordPress helps to build websites. You can host your website via WordPress.com. It contains plugin architecture and templates to easily customize and fit your business peculiarities.

This is used as a great tool to build websites as personal bloggers or for clients. It contains all the necessary plugins to build on. So don’t ever be afraid to get your feet wet and dive into WordPress. It’s pretty simple. You don’t have to be super tech-savvy to wrap your head around this system.

Once the content is uploaded, time to sprinkle some magic power to rank it higher on search engines.

6. Yoast is a Real Magic Power for Content Optimization

Yoast is one of the best-known tools for producing SEO-based content.

It’s a WordPress plugin for SEO that literally does everything, ranging from optimising for a keyword to editing and previewing meta-descriptions, URL slugs, abstracting away some minor SEO tasks, and finding relevant internal links.

When you’re working with a self-hosted WordPress site, Yoast is the best on-page SEO tool you can ever come across. It is easy to understand whether you’re running a personal blog or managing a website for a client.

Yoast will make your site as search-engine-friendly as possible. The main functionality of the tool is free, and it still builds the best-performing sites.

If you can afford the premium version you’ll also benefit from Yoast preventing and fixing dead links with the redirect manager. 58% per cent Yoast users praise the feature of redirect manager as one of the best. Premium also lets you optimize your text for synonyms and related words so Google and other search engines can determine what a text is about by detecting any other word forms in your content. It helps you get your internal linking right.

It works really hard to rank your content higher than your competitors.

They have 9,000,000 downloads—4 out of 5 stars.

Everyone I know who uses WordPress, uses Yoast. It’s just an amazing plugin.

Nevertheless, producing and optimizing quality content requires more effort to appeal to the audience’s interests which takes us to the next tool.

7. Kred Indicates Your Authority

When it comes to content marketing, just producing and uploading content won’t build credibility and trust for your brand.

You need to collaborate with influencers in your industry to amplify your messages. They will help you not to get lost, as the content is rapidly produced every second.

Unlike other tools, Kred allows you to build up your own influencer status and become an authority in your niche so your online presence is enhanced.

Kred lets users know how influential they are based on social media accounts. With the help of a comprehensive algorithm, Kred scores users based on two factors: outreach and influence. It keeps you alerted on where your content stands now so you can continue improving further.

The platform measures your influencer status analyzing Facebook and Twitter activities so you can reach out to other relevant influencers who will impact your business the most.

Once you build up your authority, your content will have more credibility. When people know who you are, they are more likely to click on your content and engage with it.

Sounds interesting? Go ahead and try them all.

Which Tool Will You Use First?

Content marketing tools will not save a bad strategy or bad product but they will certainly help you get your job done faster and more efficiently.

All these 7 tools guide you on your content marketing journey, step by step. They help you start from the first phases of writing, and on to editing, uploading and optimizing. These tools help to ramp up your productive work and get the best results.

Buzzsumo will help you delve into your audience’s interests and understand the relevancy of your content. Google Docs will contribute to gathering all your thoughts in one compact place, Grammarly will help you sound more natural, and Portent’s Idea Generator will get you a powerful headline for a hook.

WordPress gives you a space to show your content in a well-designed layout, and don’t forget to use Yoast to optimize your SEO so Google finds you upon the very first search. Then check back with Kred to see if your efforts are building your trust and credibility among your audience.

As you now know what tools are most effective to develop your content and get it noticed by the largest number of people, you are totally armed to create phenomenal pieces of writing with ease.

There are obviously more content tools than mentioned above but these are the main ones to consider while creating content at the initial stage.

If you’re looking for even more, please, head to our website for more marketing tools and hacks.

Categories: Others Tags:

From Static Sites To End User JAMstack Apps With FaunaDB

June 9th, 2020 No comments
guestbook-form-and-signature

From Static Sites To End User JAMstack Apps With FaunaDB

From Static Sites To End User JAMstack Apps With FaunaDB

Bryan Robinson

2020-06-09T12:00:00+00:00
2020-06-10T09:35:11+00:00

The JAMstack has proven itself to be one of the top ways of producing content-driven sites, but it’s also a great place to house applications, as well. If you’ve been using the JAMstack for your performant websites, the demos in this article will help you extend those philosophies to applications as well.

When using the JAMstack to build applications, you need a data service that fits into the most important aspects of the JAMstack philosophy:

  • Global distribution
  • Zero operational needs
  • A developer-friendly API.

In the JAMstack ecosystem there are plenty of software-as-a-service companies that provide ways of getting and storing specific types of data. Whether you want to send emails, SMS or make phone calls (Twilio) or accept form submissions efficiently (Formspree, Formingo, Formstack, etc.), it seems there’s an API for almost everything.

These are great services that can do a lot of the low-level work of many applications, but once your data is more complex than a spreadsheet or needs to be updated and store in real-time, it might be time to look into a database.

The service API can still be in use, but a central database managing the state and operations of your app becomes much more important. Even if you need a database, you still want it to follow the core JAMstack philosophies we outlined above. That means, we don’t want to host our own database server. We need a Database-as-a-Service solution. Our database needs to be optimized for the JAMstack:

  • Optimized for API calls from a browser or build process.
  • Flexible to model your data in the specific ways your app needs.
  • Global distribution of our data like a CDN houses our sites.
  • Hands-free scaling with no need of a database administrator or developer intervention.

Whatever service you look into needs to follow these tenets of serverless data. In our demos, we’ll explore FaunaDB, a global serverless database, featuring native GraphQL to assure that we keep our apps in step with the philosophies of the JAMstack.

Let’s dive into the code!

A JAMstack Guestbook App With Gatsby And Fauna

I’m a big fan of reimagining the internet tools and concepts of the 1990s and early 2000s. We can take these concepts and make them feel fresh with the new set of tools and interactions.

guestbook-form-and-signature

A look at the app we’re creating. A signature form with a signature list below. The form will populate a FaunaDB database and that database will create the view list. (Large preview)

In this demo, we’ll create an application that was all the rage in that time period: the guestbook. A guestbook is nothing but app-generated content and interaction. A user can come to the site, see all the signatures of past “guests” and then leave their own.

To start, we’ll statically render our site and build our data from Fauna during our build step. This will provide the fast performance we expect from a JAMstack site. To do this, we’ll use GatsbyJS.

Initial setup

Our first step will be to install Gatsby globally on our computer. If you’ve never spent much time in the command line, Gatsby’s “part 0” tutorial will help you get up and running. If you already have Node and NPM installed, you’ll install the Gatsby CLI globally and create a new site with it using the following commands:

npm install -g gatsby-cli
gatsby new <directory-to-install-into> <starter>

Gatsby comes with a large repository of starters that can help bootstrap your project. For this demo, I chose a simple starter that came equipped with the Bulma CSS framework.

gatsby new guestbook-app https://github.com/amandeepmittal/gatsby-bulma-quickstart

This gives us a good starting point and structure. It also has the added benefit of coming with styles that are ready to go.

Let’s do a little cleanup for things we don’t need. We’ll start by simplifying our components.header.js

import React from 'react';

import './style.scss';

const Header = ({ siteTitle }) => (
  <section className="hero gradientBg ">
    <div className="hero-body">
      <div className="container container--small center">
        <div className="content">
          <h1 className="is-uppercase is-size-1 has-text-white">
            Sign our Virtual Guestbook
          </h1>
          <p className="subtitle has-text-white is-size-3">
            If you like all the things that we do, be sure to sign our virtual guestbook
          </p>
        </div>
      </div>
    </div>
  </section>
);

export default Header;

This will get rid of much of the branded content. Feel free to customize this section, but we won’t write any of our code here.

Next we’ll clean out the components/midsection.js file. This will be where our app’s code will render.

import React, { useState } from 'react';
import Signatures from './signatures';
import SignForm from './sign-form';


const Midsection = () => {

    const [sigData, setSigData] = useState(data.allSignatures.nodes);
    return (
        <section className="section">
            <div className="container container--small">
                <section className="section is-small">
                    <h2 className="title is-4">Sign here</h2>
                    <SignForm></SignForm>
                </section>

                <section className="section">
                    <h2 className="title is-5">View Signatures</h2>
                    <Signatures></Signatures>
                </section>
            </div>
        </section>
    )
}

export default Midsection;

In this code, we’ve mostly removed the “site” content and added in a couple new components. A that will contain our form for submitting a signature and a component to contain the list of signatures.

Now that we have a relatively blank slate, we can set up our FaunaDB database.

Setting Up A FaunaDB Collection

After logging into Fauna (or signing up for an account), you’ll be given the option to create a new Database. We’ll create a new database called guestbook.

signatures Collection

The initial state of our signatures Collection after we add our first Document. (Large preview)

Inside this database, we’ll create a “Collection” called signature. Collections in Fauna a group of Documents that are in turn JSON objects.

In this new Collection, we’ll create a new Document with the following JSON:

{
 name: "Bryan Robinson",
 message:
   "Lorem ipsum dolor amet sum Lorem ipsum dolor amet sum Lorem ipsum dolor amet sum Lorem ipsum dolor amet sum"
}

This will be the simple data schema for each of our signatures. For each of these Documents, Fauna will create additional data surrounding it.

{
 "ref": Ref(Collection("signatures"), "262884172900598291"),
 "ts": 1586964733980000,
 "data": {
   "name": "Bryan Robinson",
   "message": "Lorem ipsum dolor amet sum Lorem ipsum dolor amet sum Lorem ipsum dolor amet sum Lorem ipsum dolor amet sum "
 }
}

The ref is the unique identifier inside of Fauna and the ts is the time (as a Unix timestamp) the document was created/updated.

After creating our data, we want an easy way to grab all that data and use it in our site. In Fauna, the most efficient way to get data is via an Index. We’ll create an Index called allSignatures. This will grab and return all of our signature Documents in the Collection.

Now that we have an efficient way of accessing the data in Gatsby, we need Gatsby to know where to get it. Gatsby has a repository of plugins that can fetch data from a variety of sources, Fauna included.

Setting up the Fauna Gatsby Data Source Plugin

npm install gatsby-source-faunadb

After we install this plugin to our project, we need to configure it in our gatsby-config.js file. In the plugins array of our project, we’ll add a new item.

{
    resolve: `gatsby-source-faunadb`,
    options: {
    // The secret for the key you're using to connect to your Fauna database.
    // You can generate on of these in the "Security" tab of your Fauna Console.
        secret: process.env.YOUR_FAUNADB_SECRET,
    // The name of the index you want to query
    // You can create an index in the "Indexes" tab of your Fauna Console.
        index: `allSignatures`,
    // This is the name under which your data will appear in Gatsby GraphQL queries
    // The following will create queries called `allBird` and `bird`.
        type: "Signatures",
    // If you need to limit the number of documents returned, you can specify a 
    // Optional maximum number to read.
    // size: 100
    },
},

In this configuration, you provide it your Fauna secret Key, the Index name we created and the “type” we want to access in our Gatsby GraphQL query.

Where did that process.env.YOUR_FAUNADB_SECRET come from?

In your project, create a .env file — and include that file in your .gitignore! This file will give Gatsby’s Webpack configuration the secret value. This will keep your sensitive information safe and not stored in GitHub.

YOUR_FAUNADB_SECRET = "value from fauna"

We can then head over to the “Security” tab in our Database and create a new key. Since this is a protected secret, it’s safe to use a “Server” role. When you save the Key, it’ll provide your secret. Be sure to grab that now, as you can’t get it again (without recreating the Key).

Once the configuration is set up, we can write a GraphQL query in our components to grab the data at build time.

Getting the data and building the template

We’ll add this query to our Midsection component to make it accessible by both of our components.

const Midsection = () => {
 const data = useStaticQuery(
 graphql`
            query GetSignatures {
                allSignatures {
                  nodes {
                    name
                    message
                    _ts
                    _id
                  }
                }
            }`
        );
// ... rest of the component
}

This will access the Signatures type we created in the configuration. It will grab all the signatures and provide an array of nodes. Those nodes will contain the data we specify we need: name, message, ts, id.

We’ll set that data into our state — this will make updating it live easier later.

const [sigData, setSigData] = useState(data.allSignatures.nodes);

Now we can pass sigData as a prop into and setSigData into .

<SignForm setSigData={setSigData}></SignForm>


<Signatures sigData={sigData}></Signatures>

Let’s set up our Signatures component to use that data!

import React from 'react';
import Signature from './signature'   

const Signatures = (props) => {
    const SignatureMarkup = () => {
        return props.sigData.map((signature, index) => {
            return (
                <Signature key={index} signature={signature}></Signature>
            )
        }).reverse()
    }

    return (
        <SignatureMarkup></SignatureMarkup>
    )
}

export default Signatures

In this function, we’ll .map() over our signature data and create an Array of markup based on a new component that we pass the data into.

The Signature component will handle formatting our data and returning an appropriate set of HTML.

import React from 'react';

const Signature = ({signature}) => {
    const dateObj = new Date(signature._ts / 1000);
    let dateString = `${dateObj.toLocaleString('default', {weekday: 'long'})}, ${dateObj.toLocaleString('default', { month: 'long' })} ${dateObj.getDate()} at ${dateObj.toLocaleTimeString('default', {hour: '2-digit',minute: '2-digit', hour12: false})}`

    return (
    <article className="signature box">      
        <h3 className="signature__headline">{signature.name} - {dateString}</h3>
        <p className="signature__message">
            {signature.message} 
        </p>
    </article>
)};

export default Signature;

At this point, if you start your Gatsby development server, you should have a list of signatures currently existing in your database. Run the following command to get up and running:

gatsby develop

Any signature stored in our database will build HTML in that component. But how can we get signatures INTO our database?

Let’s set up a signature form component to send data and update our Signatures list.

Let’s Make Our JAMstack Guestbook Interactive

First, we’ll set up the basic structure for our component. It will render a simple form onto the page with a text input, a textarea, and a button for submission.

import React from 'react';

import faunadb, { query as q } from "faunadb"

var client = new faunadb.Client({ secret: process.env.GATSBY_FAUNA_CLIENT_SECRET  })

export default class SignForm extends React.Component {
    constructor(props) {
        super(props)
        this.state = {
            sigName: "",
            sigMessage: ""
        }
    }

    handleSubmit = async event => {
        // Handle the submission
    }

    handleInputChange = event => {
        // When an input changes, update the state
    }

    render() {
        return (
            <form onSubmit={this.handleSubmit}>
                <div className="field">
                    <div className="control">
                 <label className="label">Label
                    <input 
                        className="input is-fullwidth"
                        name="sigName" 
                        type="text"
                        value={this.state.sigName}
                        onChange={this.handleInputChange}
                    />
                    </label>
                    </div>
                </div>
                <div className="field">
                    <label>
                        Your Message:
                        <textarea 
                            rows="5"
                            name="sigMessage" 
                            value={this.state.sigMessage}
                            onChange={this.handleInputChange} 
                            className="textarea" 
                            placeholder="Leave us a happy note"></textarea>

                    </label>
                </div>
                <div className="buttons">
                    <button className="button is-primary" type="submit">Sign the Guestbook</button>
                </div>
            </form>
        )
    }

}

To start, we’ll set up our state to include the name and the message. We’ll default them to blank strings and insert them into our