Archive

Archive for July, 2020

Nasa’s New Mars 2020 Logo is Amazing and We’re Over The Moon

July 30th, 2020 No comments
Nasa Mars Logo 2020

On July 30th, 2020 at 7.50am EDT (4.50am PDT), NASA intends to embark on its Mars 2020 mission with Perseverance, its fifth Mars rover, via the Atlas V rocket to look for evidence of ancient life.

To keep up with where Perseverance is at this very moment, you can check out Nasa’s website with live information.

And along with this new experience, comes a new visual identity and logo.

And who was considered worthy enough to create this once in a lifetime chance to design the logo?

The extraordinary task was assigned to none other than the multidisciplinary designer Tobias van Schneider’s studio House of van Schneider.

FINALLY we can talk about it.

A fairly well known space company asked us to design a logo for the Mars 2020 mission. Naturally, we complied.

This was a *major* bucket list project for us.

Our work:

? On a rocket
? Sent to space
? On Mars

?https://t.co/yM0hiO6oNf

— ?????? ??? ????????? (@vanschneider) July 29, 2020

According to The House of Van Schneider, NASA emphasized that the new logo needed to encompass “the energy and legacy of space travel”, while simultaneously being able to bring immense amounts of honor to the engineers who worked day and night to make this historical moment possible.

Here’s what the team had to say about this momentous opportunity.

From the moment we first set eyes on our sparkling sky, there was no going back.

We had to know what lay beyond our planet and when we found out, we had to know more.

Our curiosity and perseverance have put us into space, on the moon and now: to Mars.

For the 2020 launch of the Mars Rover, NASA asked House of van Schneider to design a symbol capturing the energy and legacy of space travel, while celebrating the engineers who worked tirelessly on this mission.

At once an abstract representation of the iconic rover and blocks reaching up to the sky, the logomark works as beautifully on the rover as it does on a 191-foot tall rocket ship.”

This new, abstract symbol is amazingly intricate, yet simple.

The 2D design symbolizes the iconic rover, whose structure is recognizable from any distance, that is going towards the Red Planet. You can even see planet earth in the distance of this design.

There’s nothing quite like this logo.

It perfectly encompasses what humanity once saw as only a dream, now made a reality.

This truly must’ve been a bucket-list moment, just like Van Schneider said.

I can’t imagine having the immense honor of creating something so historical for Nasa.

Truly, amazing.

Read More at Nasa’s New Mars 2020 Logo is Amazing and We’re Over The Moon

Categories: Designing, Others Tags:

Dark Ages of the Web

July 29th, 2020 No comments

A very fun jaunt through the early days of front-end web development. They are open to pull requests, so submit one if you’re into this kind of fun chronicling of our weird history!

That CSS3 Button generator really hits home. ?

Direct Link to ArticlePermalink


The post Dark Ages of the Web appeared first on CSS-Tricks.

You can support CSS-Tricks by being an MVP Supporter.

Categories: Designing, Others Tags:

style9: build-time CSS-in-JS

July 29th, 2020 No comments

In April of last year, Facebook revealed its big new redesign. An ambitious project, it was a rebuild of a large site with a massive amount of users. To accomplish this, they used several technologies they have created and open-sourced, such as React, GraphQL, Relay, and a new CSS-in-JS library called stylex.

This new library is internal to Facebook, but they have shared enough information about it to make an open-source implementation, style9, possible.

Why another CIJ library?

There are already plenty of CSS-in-JS (CIJ) libraries, so it might not be obvious why another one is needed. style9 has the same benefits as all other CIJ solutions, as articulated by Christopher Chedeau, including scoped selectors, dead code elimination, deterministic resolution, and the ability to share values between CSS and JavaScript.

There are, however, a couple of things that make style9 unique.

Minimal runtime

Although the styles are defined in JavaScript, they are extracted by the compiler into a regular CSS file. That means that no styles are shipped in your final JavaScript file. The only things that remain are the final class names, which the minimal runtime will conditionally apply, just like you would normally do. This results in smaller code bundles, a reduction in memory usage, and faster rendering.

Since the values are extracted at compile time, truly dynamic values can’t be used. These are thankfully not very common and since they are unique, don’t suffer from being defined inline. What’s more common is conditionally applying styles, which of course is supported. So are local constants and mathematical expressions, thanks to babel’s path.evaluate.

Atomic output

Because of how style9 works, every property declaration can be made into its own class with a single property. So, for example, if we use opacity: 0 in several places in our code, it will only exist in the generated CSS once. The benefit of this is that the CSS file grows with the number of unique declarations, not with the total amount of declarations. Since most properties are used many times, this can lead to dramatically smaller CSS files. For example, Facebook’s old homepage used 413 KB of gzipped CSS. The redesign uses 74 KB for all pages. Again, smaller file size leads to better performance.

Slide from Building the New Facebook with React and Relay by Frank Yan, at 13:23 showing the logarithmic scale of atomic CSS.

Some may complain about this, that the generated class names are not semantic, that they are opaque and are ignoring the cascade. This is true. We are treating CSS as a compilation target. But for good reason. By questioning previously assumed best practices, we can improve both the user and developer experience.

In addition, style9 has many other great features, including: typed styles using TypeScript, unused style elimination, the ability to use JavaScript variables, and support for media queries, pseudo-selectors and keyframes.

Here’s how to use it

First, install it like usual:

npm install style9

style9 has plugins for Rollup, Webpack, Gatsby, and Next.js, which are all based on a Babel plugin. Instructions on how to use them are available in the repository. Here, we’ll use the webpack plugin.

const Style9Plugin = require('style9/webpack');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
  module: {
    rules: [
      // This will transform the style9 calls
      {
        test: /.(tsx|ts|js|mjs|jsx)$/,
        use: Style9Plugin.loader
      },
      // This is part of the normal Webpack CSS extraction
      {
        test: /.css$/i,
        use: [MiniCssExtractPlugin.loader, 'css-loader']
      }
    ]
  },
  plugins: [
    // This will sort and remove duplicate declarations in the final CSS file
    new Style9Plugin(),
    // This is part of the normal Webpack CSS extraction
    new MiniCssExtractPlugin()
  ]
};

Defining styles

The syntax for creating styles closely resembles other libraries. We start by calling style9.create with objects of styles:

import style9 from 'style9';

const styles = style9.create({
  button: {
    padding: 0,
    color: 'rebeccapurple'
  },
  padding: {
    padding: 12
  },
  icon: {
    width: 24,
    height: 24
  }
});

Because all declarations will result in atomic classes, shorthands such as flex: 1 and background: blue won’t work, as they set multiple properties. Properties that can be can be expanded, such as padding, margin, overflow, etc. will be automatically converted to their longhand variants. If you use TypeScript, you will get an error when using unsupported properties.

Resolving styles

To generate a class name, we can now call the function returned by style9.create. It accepts as arguments the keys of the styles we want to use:

const className = styles('button');

The function works in such a way that styles on the right take precedence and will be merged with the styles on the left, like Object.assign. The following would result in an element with a padding of 12px and with rebeccapurple text.

const className = styles('button', 'padding');

We can conditionally apply styles using any of the following formats:

// logical AND
styles('button', hasPadding && 'padding');
// ternary
styles('button', isGreen ? 'green' : 'red');
// object of booleans
styles({
  button: true,
  green: isGreen,
  padding: hasPadding
});

These function calls will be removed during compilation and replaced with direct string concatenation. The first line in the code above will be replaced with something like 'c1r9f2e5 ' + hasPadding ? 'cu2kwdz ' : ''. No runtime is left behind.

Combining styles

We can extend a style object by accessing it with a property name and passing it to style9.

const styles = style9.create({ blue: { color: 'blue; } });
const otherStyles = style9.create({ red: { color: 'red; } });

// will be red
const className = style9(styles.blue, otherStyles.red);

Just like with the function call, the styles on the right take precedence. In this case, however, the class name can’t be statically resolved. Instead the property values will be replaced by classes and will be joined at runtime. The properties gets added to the CSS file just like before.

Summary

The benefits of CSS-in-JS are very much real. That said, we are imposing a performance cost when embedding styles in our code. By extracting the values during build-time we can have the best of both worlds. We benefit from co-locating our styles with our markup and the ability to use existing JavaScript infrastructure, while also being able to generate optimal stylesheets.

If style9 sounds interesting to you, have a look a the repo and try it out. And if you have any questions, feel free to open an issue or get in touch.

Acknowledgements

Thanks to Giuseppe Gurgone for his work on style-sheet and dss, Nicolas Gallagher for react-native-web, Satyajit Sahoo and everyone at Callstack for linaria, Christopher Chedeau, Sebastian McKenzie, Frank Yan, Ashley Watkins, Naman Goel, and everyone else who worked on stylex at Facebook for being kind enough to share their lessons publicly. And anyone else I have missed.

Links


The post style9: build-time CSS-in-JS appeared first on CSS-Tricks.

You can support CSS-Tricks by being an MVP Supporter.

Categories: Designing, Others Tags:

How to use Video in your Marketing Strategy

July 29th, 2020 No comments

Video marketing is the practice of using video content that will help you to reach your audience faster. Video marketing allows you to promote your brand, your services, and your products – but you must know that video marketing is about more than sales.

Video in digital marketing encourages more visitors to your website, joins your email list, and engages better on social media. On top of all of that, video marketing can help you to improve your customer service and make your brand stand out more.

Humans are visual creatures, and we love the way we feel when we watch videos. Facebook and YouTube have made videos popular, with over 110 million videos being watched on Facebook and over 1 billion hours on YouTube every day.

Those figures alone should tell you that it’s an essential marketing tool for your business. Currently, over 81% of companies use video marketing as part of their strategy. While people still ask whether it’s worth it as part of a business’s digital marketing strategy, and it is.

It’s not just because your competition is doing it, but because it’s known to be one of the most fluid marketing tools in the list – it’s basically an essential part of SEO.

How Video Marketing Is Used

From videos that educate your audience about what you do, to onboarding new users into your business, video marketing has a broad scope. Educational videos can really hit home and send a clear message on an important matter in a way that is interesting and entertaining. Onboarding videos allow newbies to your company to learn all they need to know in easy-to-digest clips. This makes learning far more manageable.

Why Branded Videos Are A Good Addition To Your Campaign Strategy

Video works perfectly as a way to engage your audience and help them to consume new content. When you choose to use branded video and execute it correctly, it can be an asset that you can repeatedly use across a range of channels. It’s not the same thing as advertising, as advertising isn’t as good at delivering your message to your audience.

Branded videos are highly recommended, as they can get to the heart of your audience without mentioning too much about the brand in the first place. It’s also a good idea to have your logo prominently displayed, but not so that it overshadows everything else.

Types of Videos

There is a range of videos that can be used for different reasons in video marketing, and some of these include:

  • Demo videos

If you are looking to showcase a product to your current audience and potential customers, a demo video is the way to go. They walk a new person through how the product works and gives them all the information they need to make the best buying decision. Google brought a new feature to its Translate app called Tap-To-Translate, and the video demonstrated how it worked and connected well with their users at the same time. The video was popular for a good reason!

  • Interviews

Businesses often choose testimonials when they want to showcase their customers’ appreciation, but interview videos are always a better option. Your customers can hear the happiness in the interviewee’s voice, and it offers assurance that the product is worth it. If influencers are testing your product and you video an interview with them – it’s a great way to reach your audience.

  • Brand videos

Brand videos are an inspirational way to showcase your product or company vision. Coca-Cola created a fantastic brand video for its Share A Coke campaign, reaching audiences with nostalgia and emotional moments that transport the audience back to childhood. This built great awareness about what Coca-Cola could offer, and it really stood out.

  • Explainer Videos

Many brands start their video marketing campaigns with explainer videos. Usually, this is about an individual product or service on offer. It helps your brand to establish authority in your field – if you know what you’re talking about, people will trust you!

  • Animation

For an exciting touch, animated videos are the perfect way to showcase the creativity your brand has. Animations are fun, light, and the ideal way to get a message across in a musical, colourful way!

Why Kareo? from ENVOY on Vimeo.

  • Educational videos

Everyone learns differently, with some learning through auditory aids and others through physical learning aids. Educational videos are a great visual aid to help people learn new concepts and teach them how to use your product. It makes learning fun, and you will find your audience more receptive to videos.

How to go about making a video for your business:

Videos can help your business explain your products better, offer reassuring reviews, and capture new customers’ attention. It’s easy to assume that crafting a professional video is going to take too much time and cost too much money, but it’s not as hard as you think! Here are some steps to explain it better.

  • Planning a video

Videos can help your business explain your products better, offer reassuring reviews, and capture new customers’ attention. It’s easy to assume that crafting a professional video is going to take too much time and cost too much money, but it’s not as hard as you think! Here are some steps to explain it better.

  • Script

Sometimes, videos are great unscripted and in the moment, but when it comes to a business video, you need a clear script. This will help you to cut down the editing process and save you from losing your audience. This article dictates how brands are using live videos successfully, but you can bet many of them are still scripted to remain professional.

  • Video/Audio equipment

Whether you only have an iPhone or professional camera equipment, learning to shoot a video is essential. According to Blue Corona, 54% of all mobile brand experiences are image or video-based, and many of these are shot with smartphones to social media.

  • Set-up

Are you looking to promote your product with a video shot in a professional studio, or are you hoping for a more flexible shoot on the move? How you set-up your video depends on how professional you want this to be. If you’re shooting in a studio, you need a tripod to keep the camera steady. It would help if you also had the right lighting, the right microphone for sound, and the right place to shoot without interruption.

  • Prepare your talent

Hiring in actors may be the best choice that you make for your company videos. Having the right talent in front of the camera can make the difference between your message coming across or not. If you are hiring an actor or two to do your video, make sure that they are well prepared before the video shooting!

  • Shoot

This video can tell you how to “shoot for the edit.” This means that you should remember that your footage can and will be edited later, but that you should try not to draw out the shooting.

  • Edit

Once the video is done, it’s time for the editing period. This will help you cut back too much fluff and sharpen the music in the background (if any). Video editing should also give you the chance to look back over the video to see whether you got your message across.

  • Record a voiceover (if necessary)

Whether you choose music or you need to record a voiceover, you should consider what will work best for your brand video. A voiceover is a powerful tool for your video, and it should match the mood and the tone of the video you’ve spent time on. It’ll be vital in keeping your audience’s attention.

Using videos in your email campaigns/social media:

Before you film your brand videos and implement them into your email marketing strategy, you need to decide where you will host your videos. There are plenty of excellent options out there, including:

MailChimp

MailChimp has a video merge tag that allows you to create video screenshots for your campaign. Usually, these screenshots are linked to a YouTube or Vimeo video. You can then embed the video in an email, allowing your customers to click through to the link.

BombBomb

You can have videos hosted and sent for you with BombBomb, which helps you massively when it comes to avoiding technical difficulties. Video isn’t easy for everyone, but BombBomb makes it simpler!

TailoredMail

You can have your videos uploaded, encoded, and embedded to be sent immediately with TailoredMail. You can even see the analytics of your viewers, such as their behaviour and click rate.

Why Videos?

Currently, a video has way more support with email than it ever has, but it still won’t play instantly. 48% of consumers want videos that they are interested in, and if they have signed up for your business email list, they’re already engaged!

Companies using videos for their onboarding are making smart decisions. They are used to get new users familiar with a product or service. Incidentally, over 90% of people have watched a video to understand how to use a product better.

Onboarding videos will help your business to gain a bigger audience and appeal to new customers. It’s far easier to watch a video than read an article about how to fix or use a physical product, and onboarding videos will put your business in a positive light, too.

Across social media platforms, video is the preferred method to get a message across to an audience. Instagram Stories and Facebook Stories have proven their popularity, with over 500 million Instagram story users every single day. Company videos shared on social media can be shared across all social media platforms, and it’s an excellent way to improve how a company reaches its audience.

How can you make sure your video marketing strategy is working

If you have got to the stage of knowing where you want to host your video and what you want to create, you also need to know your video’s goals. You should know what you are trying to achieve with it and the metrics to watch out for. If you identify the best metrics for determining whether you’ve reached your goals, you can get it right the first time.

Your goal can include anything from increasing brand awareness to enhancing your engagements with your audience. You should consider the target audience when you are thinking of your goals for your videos, and you should review their interests and what could tip their purchasing decisions in your favour.

All of these considerations can help to guide you to the type of video you should make and where you should upload it (email or social media, or both?)

Watch out for the metrics!

  • The view count of your videos is an important metric to consider, and if you are trying to increase brand awareness, this is important. Each platform measures views differently, which is something to consider before choosing the platform you want to use.
  • If you’re going to determine the relevance of your video and how it appeals to the audience you are reaching, you need to look for the video’s play rate. There is no point in 1,000 people seeing your video if your engagement is low, and this can help you to choose how to optimize your content.
  • Another metric to consider in regards to relevance is social sharing and comments. Those who are sharing your content can tell you that your videos are great! Social shares are a must; the more it’s shared, the more views you get. It’s a simple and yet useful metric.
  • You took the time to plan and shoot a video, which will help you learn the video completion rate. You want people to watch the video to the end, and the completion rate is the rate of those who completed the video divided by those who just pressed play.

Each of these metrics can help you learn whether your videos are compelling and reach the correct audience. If any of these are not showing you the results you want, you can make improvements.

Pay attention to the data that these metrics pull, but don’t panic if they aren’t what you think they should be. For example, you need to ensure that the customers you gain are a good business fit and not those that click through and don’t go anywhere.

Conclusion:

Video marketing is essential for exposure, engagement, and upping your relevance as a business. It’s more affordable today than ever, and the advances in technology allow videos to spread across the world, enhancing your reach and giving you millions of views!

You can use video in your marketing strategy to advertise a product, explain how your product works, and give customers insight into how your company works! With video marketing, you can ensure that your company steps into the spotlight, remaining popular to your audience for good.


Photo by Harrison Kugler on Unsplash

Categories: Others Tags:

20 Unmissable Websites, July 2020

July 29th, 2020 No comments

After six months of uncertainty 2020 is finally beginning to find a style of its own. There are nods to Brutalism, a delightful blending of 80s pastels with 90s primaries, and the font style of choice is anything but geometric sans-serif.

In this month’s collection of the freshest sites from the past four weeks you’ll find tons of new portfolios, from big agencies to freelancers, and some amazing primal scream therapy. Enjoy!

Looks Like You Need Iceland

Looks Like You Need Iceland is an incredible site that asks you to record a scream, that they’ll broadcast for you into the wide open spaces of Iceland as therapy. And then perhaps you’ll visit Iceland for real. It’s brilliant marketing for the Iceland tourist board.

Riverlane

The abstract 3D animation on Riverlane’s site is a stunning introduction to a topic that’s hard to visualize. The rest of the site is equally well done, with great typography, slick brand assets, and a professional engaging tone.

Monokai

Wimer Hazenberg’s site features a simple pixelated text column. But scroll down the page and keep an eye on the awesome text dissolve effect, it transforms this simple design.

I Weigh Community

The I Weigh Community is a non-profit community activism initiative helmed by Jameela Jamil. It’s devoted to radical inclusivity, and it promotes its message on its site with striking graphics and bold, expressive typography.

WAKA WAKA

Waka Waka is a design studio specializing in wooden furniture. The noise effect and the mid-century typography evoke the radical design of 60 years ago. The random rotations on the thumbnail hovers are delightfully disruptive.

Dataveyes

Dataveyes is an information design studio that works with large datasets to give meaning to complex information. Its site features beautiful, full-screen animations that illustrate the type of information it specializes in.

Year & Day

Year & Day is an ecommerce site that sells ceramics, glassware, and other choice pieces of tableware. It’s a colorful collection that perfectly complements your food and the stunning site takes its cues from the collection.

Dunderville

Dunderville is a motion design studio with an impressive portfolio of animation and live action films. Its site features a tactile paper fold detail, and as you would expect, some superb text, and vector animations.

André Venâncio

It’s been months since we last saw a creative developer’s site with a liquid effect. André Venâncio revisits the idea with a cool oil bubble effect, hover over the thumbnails to see it.

Thomas Prior

It’s not all 60s revivalism, pastels, and cute animations. There will always be room for minimalism, and nothing suits this style as well as portfolios for photographers; Thomas Prior’s site is a prime example.

Serra

Serra’s site features a really beautiful high-contrast typeface that sits apart from the usual sans-serif. The product page is all colored product photography. It exudes luxury and distinction in a saturated marketplace.

VYBES

VYBES is a CBD drink made in LA. Its site evokes the Californian spirit with baby pink brand colors and sun-bleached photography. It’s a cool, and ever so slightly Brutalist look for what is essentially a health drink.

Karina Sirqueira

We love the simplicity of Karina Sirqueira’s portfolio. The desaturated rainbow leads to a simple slideshow of projects, and it’s refreshing to see a minimal site that uses bold serif-based typography. The content feels fresh and honest too.

Smalls

Smalls produces healthy food for cats. The site, is packed with adorable pictures of kitties, which if you’re a cat person, is guaranteed to draw you in. There’s a definite Brutalist style to the site, and lots of color too.

Wildist

There’s a clear aesthetic beginning to emerge in 2020, with pastels creating a soft background for desaturated primaries, and Wildist gets it exactly right with this youthful, site that features just enough animation to bring it to life.

Kristen Kwong

We’ve seen a lot of OS-style sites recently, but Kristen Kwong’s is one of the slickest. It manages to take a simple metaphor for interaction and transform it with a vintage color scheme.

Stojo

Continuing the Miami-meets-Brutalism trend this month is the site for Stojo, a collapsable cup and bottle. The pastel shades block out a disrupted grid, but for our money it works better on mobile. The vintage typeface is a nice touch.

Hoang Nguyen

Hoang Nguyen’s site features a surreal 3D scene with mountains, a spinning planet, floating islands, a waterfall, and a floating dragon-boy. Click around the site and the scene transforms.

SMTH / Sam Smith

Sam Smith’s portfolio has a cool magazine style to it, with a nice blocky background on the text and a personality packed animated avatar taking centre stage.

Then I Met You

Then I met You is a site promoting a range of skincare products. In this case, the usual pastel colors are replaced with an 80s-style gradient. Watch the products as you scroll, the lighting changes creating an awesome, subtle 3D effect.

Source

Categories: Designing, Others Tags:

Understanding Client-Side GraphQl With Apollo-Client In React Apps

July 29th, 2020 No comments
GraphQL basic conventions

Understanding Client-Side GraphQl With Apollo-Client In React Apps

Understanding Client-Side GraphQl With Apollo-Client In React Apps

Blessing Krofegha

2020-07-29T10:30:00+00:00
2020-08-01T05:07:51+00:00

According to State of JavaScript 2019, 38.7% of developers would like to use GraphQL, while 50.8% of developers would like to learn GraphQL.

Being a query language, GraphQL simplifies the workflow of building a client application. It removes the complexity of managing API endpoints in client-side apps because it exposes a single HTTP endpoint to fetch the required data. Hence, it eliminates overfetching and underfetching of data, as in the case of REST.

But GraphQL is just a query language. In order to use it easily, we need a platform that does the heavy lifting for us. One such platform is Apollo.

The Apollo platform is an implementation of GraphQL that transfers data between the cloud (the server) to the UI of your app. When you use Apollo Client, all of the logic for retrieving data, tracking, loading, and updating the UI is encapsulated by the useQuery hook (as in the case of React). Hence, data fetching is declarative. It also has zero-configuration caching. Just by setting up Apollo Client in your app, you get an intelligent cache out of the box, with no additional configuration required.

Apollo Client is also interoperable with other frameworks, such as Angular, Vue.js, and React.

Note: This tutorial will benefit those who have worked with RESTful or other forms of APIs in the past on the client-side and want to see whether GraphQL is worth taking a shot at. This means you should have worked with an API before; only then will you be able to understand how beneficial GraphQL could be to you. While we will be covering a few basics of GraphQL and Apollo Client, a good knowledge of JavaScript and React Hooks will come in handy.

GraphQL Basics

This article isn’t a complete introduction to GraphQL, but we will define a few conventions before continuing.

What Is GraphQL?

GraphQL is a specification that describes a declarative query language that your clients can use to ask an API for the exact data they want. This is achieved by creating a strong type schema for your API, with ultimate flexibility. It also ensures that the API resolves data and that client queries are validated against a schema. This definition means that GraphQL contains some specifications that make it a declarative query language, with an API that is statically typed (built around Typescript) and making it possible for the client to leverage those type systems to ask the API for the exact data it wants.

So, if we created some types with some fields in them, then, from the client-side, we could say, “Give us this data with these exact fields”. Then the API will respond with that exact shape, just as if we were using a type system in a strongly typed language. You can learn more in my Typescript article.

Let’s look at some conventions of GraphQl that will help us as we continue.

The Basics

  • Operations
    In GraphQL, every action performed is called an operation. There are a few operations, namely:

    • Query
      This operation is concerned with fetching data from the server. You could also call it a read-only fetch.
    • Mutation
      This operation involves creating, updating, and deleting data from a server. It is popularly called a CUD (create, update, and delete) operation.
    • Subscriptions
      This operation in GraphQL involves sending data from a server to its clients when specific events take place. They are usually implemented with WebSockets.

In this article, we will be dealing only with query and mutation operations.

  • Operation names
    There are unique names for your client-side query and mutation operations.
  • Variables and arguments
    Operations can define arguments, very much like a function in most programming languages. Those variables can then be passed to query or mutation calls inside the operation as arguments. Variables are expected to be given at runtime during the execution of an operation from your client.
  • Aliasing
    This is a convention in client-side GraphQL that involves renaming verbose or vague field names with simple and readable field names for the UI. Aliasing is necessary in use cases where you don’t want to have conflicting field names.

GraphQL basic conventions

GraphQL basic conventions. (Large preview)

What Is Client-Side GraphQL?

When a front-end engineer builds UI components using any framework, like Vue.js or (in our case) React, those components are modeled and designed from a certain pattern on the client to suit the data that will be fetched from the server.

One of the most common problems with RESTful APIs is overfetching and underfetching. This happens because the only way for a client to download data is by hitting endpoints that return fixed data structures. Overfetching in this context means that a client downloads more information than is required by the app.

In GraphQL, on the other hand, you’d simply send a single query to the GraphQL server that includes the required data. The server would then respond with a JSON object of the exact data you’ve requested — hence, no overfetching. Sebastian Eschweiler explains the differences between RESTful APIs and GraphQL.

Client-side GraphQL is a client-side infrastructure that interfaces with data from a GraphQL server to perform the following functions:

  • It manages data by sending queries and mutating data without you having to construct HTTP requests all by yourself. You can spend less time plumbing data and more time building the actual application.
  • It manages the complexity of a cache for you. So, you can store and retrieve the data fetched from the server, without any third-party interference, and easily avoid refetching duplicate resources. Thus, it identifies when two resources are the same, which is great for a complex app.
  • It keeps your UI consistent with Optimistic UI, a convention that simulates the results of a mutation (i.e. the created data) and updates the UI even before receiving a response from the server. Once the response is received from the server, the optimistic result is thrown away and replaced with the actual result.

For further information about client-side GraphQL, spare an hour with the cocreator of GraphQL and other cool folks on GraphQL Radio.

What Is Apollo Client?

Apollo Client is an interoperable, ultra-flexible, community-driven GraphQL client for JavaScript and native platforms. Its impressive features include a robust state-management tool (Apollo Link), a zero-config caching system, a declarative approach to fetching data, easy-to-implement pagination, and the Optimistic UI for your client-side application.

Apollo Client stores not only the state from the data fetched from the server, but also the state that it has created locally on your client; hence, it manages state for both API data and local data.

It’s also important to note that you can use Apollo Client alongside other state-management tools, like Redux, without conflict. Plus, it’s possible to migrate your state management from, say, Redux to Apollo Client (which is beyond the scope of this article). Ultimately, the main purpose of Apollo Client is to enable engineers to query data in an API seamlessly.

Features of Apollo Client

Apollo Client has won over so many engineers and companies because of its extremely helpful features that make building modern robust applications a breeze. The following features come baked in:

  • Caching
    Apollo Client supports caching on the fly.
  • Optimistic UI
    Apollo Client has cool support for the Optimistic UI. It involves temporarily displaying the final state of an operation (mutation) while the operation is in progress. Once the operation is complete, the real data replaces the optimistic data.
  • Pagination
    Apollo Client has built-in functionality that makes it quite easy to implement pagination in your application. It takes care of most of the technical headaches of fetching a list of data, either in patches or at once, using the fetchMore function, which comes with the useQuery hook.

In this article, we will look at a selection of these features.

Enough of the theory. Tighten your seat belt and grab a cup of coffee to go with your pancakes, as we get our hands dirty.

Building Our Web App

This project is inspired by Scott Moss.

We will be building a simple pet shop web app, whose features include:

  • fetching our pets from the server-side;
  • creating a pet (which involves creating the name, type of pet, and image);
  • using the Optimistic UI;
  • using pagination to segment our data.

To begin, clone the repository, ensuring that the starter branch is what you’ve cloned.

Getting Started
  • Install the Apollo Client Developer Tools extension for Chrome.
  • Using the command-line interface (CLI), navigate to the directory of the cloned repository, and run the command to get all dependencies: npm install.
  • Run the command npm run app to start the app.
  • While still in the root folder, run the command npm run server. This will start our back-end server for us, which we’ll use as we proceed.

The app should open up in a configured port. Mine is http://localhost:1234/; yours is probably something else.

If everything worked well, your app should look like this:

Cloned starter branch UI

Cloned starter branch UI. (Large preview)

You’ll notice that we’ve got no pets to display. That’s because we haven’t created such functionality yet.

If you’ve installed Apollo Client Developer Tools correctly, open up the developer tools and click on the tray icon. You’ll see “Apollo” and something like this:

Apollo Client Developer Tools

Apollo Client Developer Tools. (Large preview)

Like the Redux and React developer tools, we will be using Apollo Client Developer Tools to write and test our queries and mutations. The extension comes with the GraphQL Playground.

Fetching Pets

Let’s add the functionality that fetches pets. Move over to client/src/client.js. We’ll be writing Apollo Client, linking it to an API, exporting it as a default client, and writing a new query.

Copy the following code and paste it in client.js:

import { ApolloClient } from 'apollo-client'
import { InMemoryCache } from 'apollo-cache-inmemory'
import { HttpLink } from 'apollo-link-http'

const link = new HttpLink({ uri: 'https://localhost:4000/' })
const cache = new InMemoryCache()
const client = new ApolloClient({
  link,
  cache
})
export default client

Here’s an explanation of what is happening above:

  • ApolloClient
    This will be the function that wraps our app and, thus, interfaces with the HTTP, caches the data, and updates the UI.
  • InMemoryCache
    This is the normalized data store in Apollo Client that helps with manipulating the cache in our application.
  • HttpLink
    This is a standard network interface for modifying the control flow of GraphQL requests and fetching GraphQL results. It acts as middleware, fetching results from the GraphQL server each time the link is fired. Plus, it’s a good substitute for other options, like Axios and window.fetch.
  • We declare a link variable that is assigned to an instance of HttpLink. It takes a uri property and a value to our server, which is https://localhost:4000/.
  • Next is a cache variable that holds the new instance of InMemoryCache.
  • The client variable also takes an instance of ApolloClient and wraps the link and cache.
  • Lastly, we export the client so that we can use it across the application.

Before we get to see this in action, we’ve got to make sure that our entire app is exposed to Apollo and that our app can receive data fetched from the server and that it can mutate that data.

To achieve this, let’s head over to client/src/index.js:

import React from 'react'
import ReactDOM from 'react-dom'
import { BrowserRouter } from 'react-router-dom'
import { ApolloProvider } from '@apollo/react-hooks'
import App from './components/App'
import client from './client'
import './index.css'
const Root = () => (
  <BrowserRouter>
    <ApolloProvider client={client}>
      <App />
    </ApolloProvider>
  </BrowserRouter>
);
ReactDOM.render(<Root />, document.getElementById('app'))
if (module.hot) {
  module.hot.accept()
}

As you’ll notice in the highlighted code, we’ve wrapped the App component in ApolloProvider and passed the client as a prop to the client. ApolloProvider is similar to React’s Context.Provider. It wraps your React app and places the client in context, which allows you to access it from anywhere in your component tree.

To fetch our pets from the server, we need to write queries that request the exact fields that we want. Head over to client/src/pages/Pets.js, and copy and paste the following code into it:

import React, {useState} from 'react'
import gql from 'graphql-tag'
import { useQuery, useMutation } from '@apollo/react-hooks'
import PetsList from '../components/PetsList'
import NewPetModal from '../components/NewPetModal'
import Loader from '../components/Loader'

const GET_PETS = gql`
  query getPets {
    pets {
      id
      name
      type
      img
    }
  }
`;

export default function Pets () {
  const [modal, setModal] = useState(false)
  const { loading, error, data } = useQuery(GET_PETS);

  if (loading) return <Loader />;

  if (error) return <p>An error occured!</p>;


  const onSubmit = input => {
    setModal(false)
  }
  

  if (modal) {
    return <NewPetModal onSubmit={onSubmit} onCancel={() => setModal(false)} />
  }
  return (
    <div className="page pets-page">
      <section>
        <div className="row betwee-xs middle-xs">
          <div className="col-xs-10">
            <h1>Pets</h1>
          </div>
          <div className="col-xs-2">
            <button onClick={() => setModal(true)}>new pet</button>
          </div>
        </div>
      </section>
      <section>
        <PetsList pets={data.pets}/>
      </section>
    </div>
  )
}

With a few bits of code, we are able to fetch the pets from the server.

What Is gql?

It’s important to note that operations in GraphQL are generally JSON objects written with graphql-tag and with backticks.

gql tags are JavaScript template literal tags that parse GraphQL query strings into the GraphQL AST (abstract syntax tree).

  • Query operations
    In order to fetch our pets from the server, we need to perform a query operation.

    • Because we’re making a query operation, we needed to specify the type of operation before naming it.
    • The name of our query is GET_PETS. It’s a naming convention of GraphQL to use camelCase for field names.
    • The name of our fields is pets. Hence, we specify the exact fields that we need from the server (id, name, type, img).
    • useQuery is a React hook that is the basis for executing queries in an Apollo application. To perform a query operation in our React component, we call the useQuery hook, which was initially imported from @apollo/react-hooks. Next, we pass it a GraphQL query string, which is GET_PETS in our case.
  • When our component renders, useQuery returns an object response from Apollo Client that contains loading, error, and data properties. Thus, they are destructured, so that we can use them to render the UI.
  • useQuery is awesome. We don’t have to include async-await. It’s already taken care of in the background. Pretty cool, isn’t it?
    • loading
      This property helps us handle the loading state of the application. In our case, we return a Loader component while our application loads. By default, loading is false.
    • error
      Just in case, we use this property to handle any error that might occur.
    • data
      This contains our actual data from the server.
    • Lastly, in our PetsList component, we pass the pets props, with data.pets as an object value.

At this point, we have successfully queried our server.

To start our application, let’s run the following command:

  • Start the client app. Run the command npm run app in your CLI.
  • Start the server. Run the command npm run server in another CLI.

VScode CLI partitioned to start both the client and the server.

VScode CLI partitioned to start both the client and the server. (Large preview)

If all went well, you should see this:

Pets queried from the server.

Mutating Data

Mutating data or creating data in Apollo Client is almost the same as querying data, with very slight changes.

Still in client/src/pages/Pets.js, let’s copy and paste the highlighted code:

....

const GET_PETS = gql`
  query getPets {
    pets {
      id
      name
      type
      img
    }
  }
`;

const NEW_PETS = gql`
  mutation CreateAPet($newPet: NewPetInput!) {
    addPet(input: $newPet) {
      id
      name
      type
      img
    }
  }
`;

  const Pets = () => {
  const [modal, setModal] = useState(false)
  const { loading, error, data } = useQuery(GET_PETS);
  const [createPet, newPet] = useMutation(NEW_PETS);
  const onSubmit = input => {
    setModal(false)
    createPet({
      variables: { newPet: input }
    });
  }

  if (loading || newPet.loading) return <Loader />;
  
  if (error || newPet.error) return <p>An error occured</p>;
  
  if (modal) {
    return <NewPetModal onSubmit={onSubmit} onCancel={() => setModal(false)} />
  }
  return (
    <div className="page pets-page">
      <section>
        <div className="row betwee-xs middle-xs">
          <div className="col-xs-10">
            <h1>Pets</h1>
          </div>
          <div className="col-xs-2">
            <button onClick={() => setModal(true)}>new pet</button>
          </div>
        </div>
      </section>
      <section>
        <PetsList pets={data.pets}/>
      </section>
    </div>
  )
}

export default Pets

To create a mutation, we would take the following steps.

1. mutation

To create, update, or delete, we need to perform the mutation operation. The mutation operation has a CreateAPet name, with one argument. This argument has a $newPet variable, with a type of NewPetInput. The ! means that the operation is required; thus, GraphQL won’t execute the operation unless we pass a newPet variable whose type is NewPetInput.

2. addPet

The addPet function, which is inside the mutation operation, takes an argument of input and is set to our $newPet variable. The field sets specified in our addPet function must be equal to the field sets in our query. The field sets in our operation are:

  • id
  • name
  • type
  • img

3. useMutation

The useMutation React hook is the primary API for executing mutations in an Apollo application. When we need to mutate data, we call useMutation in a React component and pass it a GraphQL string (in our case, NEW_PETS).

When our component renders useMutation, it returns a tuple (that is, an ordered set of data constituting a record) in an array that includes:

  • a mutate function that we can call at any time to execute the mutation;
  • an object with fields that represent the current status of the mutation’s execution.

The useMutation hook is passed a GraphQL mutation string (which is NEW_PETS in our case). We destructured the tuple, which is the function (createPet) that will mutate the data and the object field (newPets).

4. createPet

In our onSubmit function, shortly after the setModal state, we defined our createPet. This function takes a variable with an object property of a value set to { newPet: input }. The input represents the various input fields in our form (such as name, type, etc.).

With that done, the outcome should look like this:

Mutation without instant update.

If you observe the GIF closely, you’ll notice that our created pet doesn’t show up instantly, only when the page is refreshed. However, it has been updated on the server.

The big question is, why doesn’t our pet update instantly? Let’s find out in the next section.

Caching In Apollo Client

The reason our app doesn’t update automatically is that our newly created data doesn’t match the cache data in Apollo Client. So, there is a conflict as to what exactly it needs to be updated from the cache.

Simply put, if we perform a mutation that updates or deletes multiple entries (a node), then we are responsible for updating any queries referencing that node, so that it modifies our cached data to match the modifications that a mutation makes to our back-end data.

Keeping Cache In Sync

There are a few ways to keep our cache in sync each time we perform a mutation operation.

The first is by refetching matching queries after a mutation, using the refetchQueries object property (the simplest way).

Note: If we were to use this method, it would take an object property in our createPet function called refetchQueries, and it would contain an array of objects with a value of the query: refetchQueries: [{ query: GET_PETS }].

Because our focus in this section isn’t just to update our created pets in the UI, but to manipulate the cache, we won’t be using this method.

The second approach is to use the update function. In Apollo Client, there’s an update helper function that helps modify the cache data, so that it syncs with the modifications that a mutation makes to our back-end data. Using this function, we can read and write to the cache.

Updating The Cache

Copy the following highlighted code, and paste it in client/src/pages/Pets.js:

......
const Pets = () => {
  const [modal, setModal] = useState(false)
  const { loading, error, data } = useQuery(GET_PETS);
  const [createPet, newPet] = useMutation(NEW_PETS, {
    update(cache, { data: { addPet } }) {
      const data = cache.readQuery({ query: GET_PETS });
      cache.writeQuery({
        query: GET_PETS,
        data: { pets: [addPet, ...data.pets] },
      });
    },
    }
  );
  .....

The update function receives two arguments:

  • The first argument is the cache from Apollo Client.
  • The second is the exact mutation response from the server. We destructure the data property and set it to our mutation (addPet).

Next, to update the function, we need to check for what query needs to be updated (in our case, the GET_PETS query) and read the cache.

Secondly, we need to write to the query that was read, so that it knows we’re about to update it. We do so by passing an object that contains a query object property, with the value set to our query operation (GET_PETS), and a data property whose value is a pet object and that has an array of the addPet mutation and a copy of the pet’s data.

If you followed these steps carefully, you should see your pets update automatically as you create them. Let’s take a look at the changes:

Pets updates instantly
Pets updates instantly.

Optimistic UI

A lot of people are big fans of loaders and spinners. There’s nothing wrong with using a loader; there are perfect use cases where a loader is the best option. I’ve written about loaders versus spinners and their best use cases.

Loaders and spinners indeed play an important role in UI and UX design, but the arrival of Optimistic UI has stolen the spotlight.

What Is Optimistic UI?

Optimistic UI is a convention that simulates the results of a mutation (created data) and updates the UI before receiving a response from the server. Once the response is received from the server, the optimistic result is thrown away and replaced with the actual result.

In the end, an optimistic UI is nothing more than a way to manage perceived performance and avoid loading states.

Apollo Client has a very interesting way of integrating the Optimistic UI. It gives us a simple hook that allows us to write to the local cache after mutation. Let’s see how it works!

Step 1

Head over to client/src/client.js, and add only the highlighted code.

import { ApolloClient } from 'apollo-client'
import { InMemoryCache } from 'apollo-cache-inmemory'
import { HttpLink } from 'apollo-link-http'
import { setContext } from 'apollo-link-context'
import { ApolloLink } from 'apollo-link'
const http = new HttpLink({ uri: "http://localhost:4000/" });
const delay = setContext(
  request => 
    new Promise((success, fail) => {
      setTimeout(() => {
        success()
      }, 800)
    })
)
const link = ApolloLink.from([
  delay,
  http
])
const cache = new InMemoryCache()
const client = new ApolloClient({
  link,
  cache
})
export default client

The first step involves the following:

  • We import setContext from apollo-link-context. The setContext function takes a callback function and returns a promise whose setTimeout is set to 800ms, in order to create a delay when a mutation operation is performed.
  • The ApolloLink.from method ensures that the network activity that represents the link (our API) from HTTP is delayed.

Step 2

The next step is using the Optimistic UI hook. Slide back to client/src/pages/Pets.js, and add only the highlighted code below.

.....

const Pets = () => {
  const [modal, setModal] = useState(false)
  const { loading, error, data } = useQuery(GET_PETS);
  const [createPet, newPet] = useMutation(NEW_PETS, {
    update(cache, { data: { addPet } }) {
      const data = cache.readQuery({ query: GET_PETS });
      cache.writeQuery({
        query: GET_PETS,
        data: { pets: [addPet, ...data.pets] },
      });
    },
    }
  );
  const onSubmit = input => {
    setModal(false)
    createPet({
      variables: { newPet: input },
      optimisticResponse: {
        __typename: 'Mutation',
        addPet: {
          __typename: 'Pet',
          id: Math.floor(Math.random() * 10000 + ''),
          name: input.name,
          type: input.type,
          img: 'https://via.placeholder.com/200'
        }
      }
    });
  }
  .....

The optimisticResponse object is used if we want the UI to update immediately when we create a pet, instead of waiting for the server response.

The code snippets above include the following:

  • __typename is injected by Apollo into the query to fetch the type of the queried entities. Those types are used by Apollo Client to build the id property (which is a symbol) for caching purposes in apollo-cache. So, __typename is a valid property of the query response.
  • The mutation is set as the __typename of optimisticResponse.
  • Just as earlier defined, our mutation’s name is addPet, and the __typename is Pet.
  • Next are the fields of our mutation that we want the optimistic response to update:
    • id
      Because we don’t know what the ID from the server will be, we made one up using Math.floor.
    • name
      This value is set to input.name.
    • type
      The type’s value is input.type.
    • img
      Now, because our server generates images for us, we used a placeholder to mimic our image from the server.

This was indeed a long ride. If you got to the end, don’t hesitate to take a break from your chair with your cup of coffee.

Let’s take a look at our outcome. The supporting repository for this project is on GitHub. Clone and experiment with it.

Final Outcome of the pet shop app
Final result of our app.

Conclusion

The amazing features of Apollo Client, such as the Optimistic UI and pagination, make building client-side apps a reality.

While Apollo Client works very well with other frameworks, such as Vue.js and Angular, React developers have Apollo Client Hooks, and so they can’t help but enjoy building a great app.

In this article, we’ve only scratched the surface. Mastering Apollo Client demands constant practice. So, go ahead and clone the repository, add pagination, and play around with the other features it offers.

Please do share your feedback and experience in the comments section below. We can also discuss your progress on Twitter. Cheers!

References

Smashing Editorial
(ks, ra, al, yk, il)
Categories: Others Tags:

4 DevOps Must-Dos For Development Project Success

July 29th, 2020 No comments

As time passes, more and more businesses are turning towards technology to grow into successful companies. This has become an essential move in this modern technology-driven world.

This is the characteristic that helps a business to grow and sustain itself in the future. However, you must always remember that growing via technology is an immensely difficult and complicated task.

As per the Best Jobs in America report of 2018, by Glassdoor, being a DevOps engineer is the second-best technology-related job in the United States. Taking into consideration the demand for such a job and the skill-set required for it, this report is hardly surprising.

Top class enterprises like Amazon, Facebook, Walmart and Netflix are making use of DevOps so that they can ensure its users a consistent and rapid delivery of security updates. Along with all these large-scale businesses, even startup and medium-sized businesses are starting to make use of DevOps as well.

Businesses today have two main ways, in which they can make use of DevOps. One is spending money on in-house DevOps developers. The other option is to invest money in DevOps service providers. Each of these two methods has pros and cons of its own.

Before delving further into DevOps, let’s just get to know about what DevOps actually means.

What is DevOps?

In this extremely competitive age, DevOps plays the part of providing a particular company with an edge over all its other competitors. For instance, if you own an e-commerce company, You are clearly a part of the retail industry. However, just by adding technology into the mix, you can take your retail business to unprecedented levels.

According to a report by DZone, “The intention of DevOps is to create better-quality software more quickly and with more reliability while inviting greater communication and collaboration between teams.”

Role Recognition

According to Antao and other experts, there is no such thing as a DevOps team, but only an approach. In addition to that, there exists even lesser clarity around the topic of DevOps roles. It is therefore not surprising when DevOps is defined as “a thing that everybody wants but nobody wants to do.” – a comment made by the director of product marketing for source code management, Mark Warren.

According to the managing director of Accenture, Martin Croker, ‘figuring out the right DevOps roles is a journey, not a destination and a long journey at that.”

A client of PwC, which is a software company, has shifted its format of doing business, from delivering an on-premise product, to a drastically different one involving serving customers in the cloud. This very move has drastically affected almost every aspect of the company, starting from sales and marketing, all the way to HR and R&D. The biggest shift, however, took place in the technology department, which suddenly is required to deliver new features on a daily and weekly basis, rather than annually. To embrace this drastic change in operations, it welcomed DevOps.

According to Antao, “The business model changed drastically, and they suddenly had a great need for speed.” It needed to develop new skills both in the IT department and the operation teams to achieve immense velocity. Antao also says, “There were no answers readily available in year one. It’s a lot of trial and error to figure out what works and what doesn’t.”

All this information might be giving birth to a lot of questions in your head, the most significant of them being, what type of DevOps can actually prove to be helpful. There actually is an availability of a variety of tools, which you can choose from when the synergy of development and operations come into play.

For you to understand clearly about the functioning of DevOps, it is crucial that you are informed about a few DevOps must-dos for the success of development projects.

Crucial DevOps Must-Dos

Make technology Accessible Across all Departments

If you have an expert DevOps team at the core, you will automatically have the ability to implement the most advanced technology. On the flip side, if all the departments of your company do not have access to an equal level of technology, then there is a chance that your projects will not see success. This shows how crucial accessibility is.

Provided the fact that all the departments have access to technology, the projects turn out to be drastically efficient. This allows you to boost your productivity.

Tech development, however, is not just an external affair. It is also used to streamline internal business processes.

Track the Technology You Have Employed

Not all the technology that you have introduced into your business is going to function in the same manner. Unless every technology is in its place and you are able to track it, you will never get to know if one is working. Tracking the progress of a particular tech is an absolute must-do, as far as DevOps operations go.

For example, you can set up key metrics to assess the validity of a particular technology, introduced for a particular business function. If you see that the metrics are not on par with your project goals, then you can choose to modify or completely eliminate that particular technology from the process.

Make sure that Technology and DevOps is Part of Your Business Equation

Having a particular technology as being more prevalent in your business is a challenge of some kind, as many of your team members will not understand its value right away. There are a huge number of businesses, which fail due to a reason like this.

You must always strive to present technology in front of everybody, as a successful strategy that benefits everybody. You need to convince everybody that the employment of DevOps processes will prove beneficial for your business in the long run.

Scalable Development Tools Are Essential

This is extremely crucial for operating at an optimal level in a business. No matter how qualified members you have in your team, without a proper set of tools, they will not be able to operate.

DevOps Experts who actually understand the value of the correct set of tools can add immense amounts of value to various development processes like coding, portability, analysis and project management as well.

Conclusion

It is inherently challenging to find effective ways of remaining competitive in your industry. So the use of technology, to receive the edge that you need. The above blog about DevOps must-dos will enable you to successfully achieve this goal.

Categories: Others Tags:

Top 10 Podcast WordPress themes for 2020

July 29th, 2020 No comments

Do you dream of reaching millions of people around the world with your valuable compositions that you create combining musical notes or playing with a camera?

A WordPress podcast theme will pave your way if you want to entertain others with your offerings. A podcast is the most convenient and cost-effective option to create an audience base virtually anywhere in the world. It is not just useful for artists or trainers but also for business organizations.

A podcast makes a website more lively and catches users’ attention. If the podcast is able to hit a sensitive touchpoint, users’ attention gets arrested and it increases the chances of conversion. In this article, we will give you a list of the 10 most popular WordPress podcast themes of the year. Go through the list. Hope you will find at least one theme suitable for your needs.

Best WordPress podcast themes of the year:

1. Podcast

The Podcast is a responsive multimedia WordPress theme. It helps you to build your own podcast, podcasting network, or radio station. It supports native audio and video players as well as oEmbed. With this, you can host your audio content on popular platforms like SoundCloud, PopBean, Spotify, etc. The theme is responsive and retina ready.

Features:

  • Built-in audio player
  • Reading time
  • Online store
  • One-click import
  • Pre-designed pages

Price: $47

2. WP Cast

WP Cast is a fast-loading Audio podcast theme for WordPress. It has 16+ Shortcodes and 4+ archive designs. There are featured players, series manager, series card and page builder. The theme works well with Libsyn, Anchor.fm and Blubrry. It is Mailchimp ready. It is a page builder included theme. It is ideal for professional use.

Features:

  • Featured Player
  • Series manager
  • Series card
  • Added podcast timestamp functionality
  • Apple & Google podcast ready

Price: $56

3. Podcaster

Podcaster is a WordPress multimedia podcast theme. It is flexible and responsive. There are dark and light theme options, sticky header and colour palettes. You can easily upload your own logo and display galleries, slide show, or grid. The theme has a parallax scrolling feature for custom header images. It comes with many easy to customize theme options. It is user friendly and well documented.

Features:

  • Audio & video support
  • Major podcasting plugin support
  • Multimedia frontpage
  • GDPR compatibility
  • Unlimited episode archive pages
  • Podcast archive

Price: $49

4. Fastcast

Fastcast is a modern podcast theme for WordPress. It comes with minimal design and a responsive custom player. There are white and dark modes and fast and easy navigation. The theme supports Android, Itunes, Apple Podcast, Spotify Podcast RSS and XML. It is user friendly yet professional. It is fit for most of the recent WordPress plugins.

Features

  • Pixel perfect
  • 8 podcast skins
  • Google Web Font & custom font support
  • YouTube, Vimeo & Embed code acceptable
  • Well documented

Price: $69

5. Soundbyte

Soundbyte is a feature-rich WordPress theme for a podcast. It comes with drag & drop page builder, premium sliders, sticky header, mega menus and Photoshop files. It is a boosted element addon included theme. The theme has unlimited colour and font adjusting options. There are advanced contact forms. It is responsive, retina ready and well documented.

Features:

  • SEO friendly
  • eCommerce ready
  • RSS feed support
  • Mobile compatible
  • Translation ready

Price: $59

6. Megabyte

Megabyte is a responsive podcast theme for WordPress. It has an advanced drag & drop page builder, sticky header and mega menus. There are unlimited colours and font adjusting options. The theme has advanced contact forms, top-notch support and premium sport. It is a photoshop file included theme. It is user friendly. No technical skills required to use this.

Features:

  • eCommerce ready
  • RSS feed support
  • Translation ready
  • Mobile-friendly
  • Boosted elements addon included

Price: $52

7. Castpod

Castpod is a responsive and retina ready WordPress theme for the podcast. It has an HTML5 audio player, transcripts and statistics. There are simple and clean codes. The theme is compatible with WP forms and MailChimp. There is an advanced and easy to use WordPress customizer. With this theme, you may import external podcasts and redo your website. It is speed optimized and well documented.

Features:

  • One-click import
  • WooCommerce support
  • Gutenberg ready
  • RTL support
  • Translation ready

Price: $45

8. Castilo

Castilo is a professional WordPress Audio Podcast theme. It comes with a one-click demo importer, theme customizer and social icon menu. There are custom colour and custom logo options. The theme has footer and sidebar widgets support. You can import external feed and generate RSS2 feed. Castilo is WooCommerce ready and speed optimized. It is compatible with Contact Form 7 and Mailchimp. It is a developer-friendly theme.

Features

  • HTML5 audio player
  • Gutenberg ready
  • Statistics & transcripts
  • RTL support
  • Translation ready

Price – $45

9. Rekord

Rekord is a modern and multipurpose WordPress theme. It is most suitable for events and podcasts. It offers you readymade widgets, multiple skins and RTL support. The playlists are powered by wave surfers. Rekord is based on Bootstrap 4. It is a completely Ajaxily theme. It works well with most of the latest WordPress plugins. It is easily customizable and well documented.

Features:

  • Frontend upload
  • Wavesport player
  • Radio streaming
  • Dark & light skins
  • WooCommerce ready

Price: $75

10. Audonic

Audonic is a flexible WordPress theme for the podcast and music. It supports native audio and video players and oEmbed. There are unlimited audio playlists, custom category header, hero slider and header site search. You can upload your logo, edit footer text, and choose between dark and light themes. You can also decide how many entries to display with a featured slider. The theme is ready to use and easy to customize.

Features:

  • Responsive layout
  • Easy customization
  • Music & podcast archive
  • Mobile friendly
  • Social media support

Price: $56

Conclusion

When you have a user-friendly podcast theme at your hand which is ideal for your purpose, reaching any corner of the world is a matter of only a few clicks. All the above-mentioned themes will let you realise your dreams within minutes after installation. You will be able to reach out to your audiences with your valuable offerings easily. Pick up the one best for you and proceed forward. People are waiting for you.

If you liked the article, please share it on Facebook and Twitter. Leave your feedback on the comment section. We would love to hear from you. If there is any query, please feel free to share it with us. We will try to get back to you as soon as possible.


Photo by ConvertKit on Unsplash

Categories: Others Tags:

A Bit on Web Component Libraries

July 28th, 2020 No comments

A run of Web Components news crossed my desk recently so I thought I’d group it up here.

To my mind, one of the best use cases for Web Components is pattern libraries. Instead of doing, say,